晶粒随机形核长大12
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
use msflib
parameter ir=400,jr=400,nmax=150
integer is(0:ir+1,0:jr+1),tmax,isn(1:8),nstate,t,ix0,jy0,nr integer igv(0:nmax)
write(*,*) "please input the time step"
read(*,*) tmax
iseed=rtc()
do i=1,nmax
ix0=ir*ran(iseed)+1
jy0=jr*ran(iseed)+1
is(ix0,jy0)=i
end do
is(0,1:jmax)=is(imax,1:jmax)
is(imax+1,1:jmax)=is(1,1:jmax)
is(0:imax,0)=is(0:imax+1,jmax)
is(0:imax+1,jmax+1)=is(0:imax+1,1)
open(1,file="F:\luck.dat")
igv=1
igv(0)=10
do t=1,tmax
iarea=0
do x=1,ir
do y=1,jr
ix=ir*ran(iseed)+1
jy=jr*ran(iseed)+1
isn=(/is(ix-1,jy-1),is(ix-1,jy),is(ix-1,jy+1),is(ix,jy-1), !is(ix,jy+1),is(ix+1,jy-1),is(ix+1,jy),is(ix+1,jy+1)/)
e0=count(isn.ne.is(ix,jy))
if(e0.eq.0) cycle
nr=8*ran(iseed)+1
nstate=isn(nr)
rd=ran(iseed)
e=count(isn.ne.nstate)
ig=igv(isn(nr))-igv(is(ix,jy))
de=ig+e-e0+2.5*rd-1.25
if (de.lt.0.0) is(ix,jy)=nstate
iser=setcolor(mod(is(ix,jy),15)+1)
iser=setpixel(ix,jy)
if(is(ix,jy).ne.0) iarea=iarea+1
end do
end do
write(1,*) t,sqrt(1.0*iarea)
end do
close(1)
end
use msflib
parameter ir=400,jr=400,nmax=150
integer is(0:ir+1,0:jr+1),tmax,isn(1:8),nstate,t,ix0,jy0,nr,ix,jy integer igv(0:nmax)
write(*,*) "please input the time step"
read(*,*) tmax
iseed=rtc()
do i=1,nmax
ix0=ir*ran(iseed)+1
jy0=jr*ran(iseed)+1
is(ix0,jy0)=i
end do
is(0,1:jmax)=is(imax,1:jmax)
is(imax+1,1:jmax)=is(1,1:jmax)
is(0:imax,0)=is(0:imax+1,jmax)
is(0:imax+1,jmax+1)=is(0:imax+1,1)
open(1,file="F:\luck.dat")
igv=1
igv(0)=10
do t=1,tmax
iarea=0
do x=1,ir
do y=1,jr
ix=ir*ran(iseed)+1
jy=jr*ran(iseed)+1
isn=(/is(ix-1,jy-1),is(ix-1,jy),is(ix-1,jy+1),is(ix,jy-1),
!is(ix,jy+1),is(ix+1,jy-1),is(ix+1,jy),is(ix+1,jy+1)/)
e0=count(isn.ne.is(ix,jy))
if(e0.eq.0) cycle
nr=8*ran(iseed)+1
nstate=isn(nr)
rd=ran(iseed)
e=count(isn.ne.nstate)
ig=igv(isn(nr))-igv(is(ix,jy))
de=ig+e-e0+2.5*rd-1.25
if (de.lt.0.0) is(ix,jy)=nstate
i=mod(is(ix,jy),15)
if(i==0) i=i+1
isre=setcolor(i)
isre=setpixel(ix,jy)
if(is(ix,jy).ne.0) iarea=iarea+1
end do
end do
write(1,*) t,sqrt(1.0*iarea) end do
close(1)
end