Simulation of Nucleation and Growth Process for In-Tl alloys.



!----------------------------------------------------------------------
!     2D Idealized Nucleation and Growth Model
!
!             4th Neighbor Strain Field
!
!             by H.Abe      1999.11.30
!----------------------------------------------------------------------
!     PR     : Propability Rate from Activation Energy
!     NB     : Neighbor Order
!     P1     : Parameter of Strain Energy
!     P2     : Parameter of Strain Energy
!     TW     : Two Types of Twin ( TW >.5 :Type I   c/a > 1 )
!                                ( TW <.5 :Type II  c/a < 1 )
!     ITER   : Iteration
!     nP     : Number of Positive
!     nN     : Number of Negative
!     nC     : Number of Cluster
!     nEC    : Number of END Cluster
!     nHM    : Half Maximum
!     mX     : Number of Grid along X direction
!     mY     : Number of Grid along Y direction
!     Vmax   : END Rate
!     IV     : Interval of File DATA
!--------------------------------------------------------------
PROGRAM ING
  integer, parameter                         :: dp=selected_real_kind(10)
  Real(kind=dp),dimension(:,:), allocatable  :: S
  real (kind=dp)      :: PR, P1, P2, Vmax, p, SF, SI1, SI2, SI
  integer             :: NB, Iter, nP, nN, nC, nEC, nHM, mX, mY, IV, iX, iY, TW
  integer             :: HM, nFLG, nMax, tHM
  Character (Len=50)  :: DR, FO, File_curve, File_map
  Character (len=4)   :: EX1, EX2
!-----------------------------------------
  mX = 256; mY = 256
  mX = 100; mY = 100

  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 ABE

Back to Department of Materials Science and Engineering


ab@cc.nda.ac.jp

Department of Materials Science and Engineering
National Defense Academy

Last Modified: April 1, 2009