当前位置:文档之家› 晶粒长大fortran程序

晶粒长大fortran程序

!原子的三维跳跃integer x,y,z,xyz(1:1000,1:1000),xn(1:6),yn(1:6),zn(1:6),rn real xyzm(1:1000)write(*,*)"实验天数Jmax,实验次数Imax"read(*,*) jmax,imaxxn=(/0,0,0,0,1,-1/)yn=(/0,0,-1,1,0,0/)zn=(/1,-1,0,0,0,0/)iseed=rtc()do j=1,jmaxx=0y=0z=0do i=1,imaxrn=6*ran(iseed)+1x=x+xn(rn)y=y+yn(rn)z=z+zn(rn)xyz(j,i)=x*x+y*y+z*zend doend doopen(1,file="F:\089024352yi.dat")do i=1,imaxxyzm=0xyzm(i)=1.0*sum(xyz(1:jmax,i))/jmaxwrite(1,*) i,xyzm(i)end doclose(1)end!MC单晶长大use msflibparameter ir=400,jr=400integer is(0:ir+1,0:jr+1),tmax,isn(1:8),nstate,t,nr,ix,iy write(*,*)"please input the time step"read(*,*)tmaxiseed=rtc()irc=ir/2jrc=jr/2r=min(irc,jrc)-10is=10is(irc,jrc)=2open(1,file="f:\089024352er.dat")do t=1,tmaxdo x=1,irdo y=1,jrix=ir*ran(iseed)+1jy=jr*ran(iseed)+1isn=(/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) cyclenr=8*ran(iseed)+1nstate=isn(nr)e=count(isn.ne.nstate)rd=ran(iseed)de=e-e0+7*(nstate-is(ix,jy))+2.5*rd-1.25if (de.lt.0.0) is(ix,jy)=nstateisre=setcolor(is(ix,jy))isre=setpixel(ix,jy)end doend dowrite(1,*) t, sqrt(1.0*count(is.eq.2))end doclose(1)end!MC多晶长大use msflibparameter ir=400,jr=400,nmax=100integer is(0:ir+1,0:jr+1),tmax,isn(1:8),nstate,!t,nr,ix0,iy0,ix,iyinteger igv(0:nmax)write(*,*)"please input the time step"read(*,*)tmaxiseed=rtc()! is=0do i=1,nmaxix0=ir*ran(iseed)+1jy0=jr*ran(iseed)+1is(ix0,jy0)=iend do!is(0,1:jmax)=is(imax,1:jmax)!is(imax+1,1:jmax)=is(1,1:jmax)!is(0:imax+1,0)=is(0:imax+1,jmax)!is(0:imax+1,jmax+1)=is(0:imax+1,1)open(1,file="F:\089024352san.dat")igv=1igv(0)=10do t=1,tmax! iarea=0is(0,0:jr+1)=is(ir,0:jr+1)is(ir+1,0:jr+1)=is(1,0:jr+1)is(0:ir+1,0)=is(0:ir+1,jr)is(0:ir+1,jr+1)=is(0:ir+1,1)do x=1,irdo y=1,jrix=ir*ran(iseed)+1jy=jr*ran(iseed)+1isn=(/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)cyclenr=8*ran(iseed)+1nstate=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.25if(de.lt.0.0) is(ix,jy)=nstateiii=mod(is(ix,jy),15)if(iii==0)iii=iii+1isre=setcolor(iii)isre=setpixel(ix,jy)! if(is(ix,jy).ne.10)iarea=iarea+1end doend do! write(1,*)t,1.0*iareawrite(1,*)t,sqrt(1.0*count(is.ne.0))end doclose(1)end!CA单晶长大use msflibparameter ir=400,jr=400integer is(0:ir+1,0:jr+1),tmax,isn(1:8),nstate,t,nr,is0,iy0,ix,jy integer is1(0:ir+1,0:jr+1),isn1(1:8)write(*,*)"please input the time step"read(*,*)tmaxiseed=rtc()irc=ir/2jrc=jr/2is=10is(irc,jrc)=1is1=isopen(1,file="F:\089024352si.dat")do t=1,tmaxis=is1do ix=1,irdo jy=1,jrisn=(/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))nr=8*ran(iseed)+1nstate=isn(nr)e=count(isn.ne.nstate)rd=ran(iseed)ig=nstate-is(ix,jy)de=e-e0+ig+2.5*rd-1.25if(de.lt.0.0)is1(ix,jy)=nstateend doend dodo ix=1,irdo jy=1,jrif(mod(t,20).eq.0)thenisn1=(/is1(ix-1,jy-1),is1(ix-1,jy),is1(ix-1,jy+1),is1(ix,jy-1),! is1(ix,jy+1),is1(ix+1,jy-1),is1(ix+1,jy),is1(ix+1,jy+1)/) isre=setcolor(is(ix,jy))if(count(isn1.ne.is1(ix,jy)).gt.0)isre=setcolor(15)isre=setpixel(ix,jy)end ifend doend dowrite(1,*)t,sqrt(1.0*count(is.eq.1))end doclose(1)end!CA多晶长大use msflibparameter ir=400,jr=400,nmax=100integer is(0:ir+1,0:jr+1),tmax,isn(1:8),nstate,t,nr,is0,iy0,ix,jy integer igv(0:nmax)integer is1(0:ir+1,0:jr+1),isn1(1:8)write(*,*)"please input the time step"read(*,*)tmaxiseed=rtc()igv=1igv(0)=10do i=1,nmaxix0=ir*ran(iseed)+1jy0=jr*ran(iseed)+1if(is(ix0,jy0).ne.0)cycleis(ix0,jy0)=iend dois1=isopen(1,file="F:\089024352wu.dat")do t=1,tmaxis=is1is(0,0:jr+1)=is(ir,0:jr+1)is(ir+1,0:jr+1)=is(1,0:jr+1)is(0:ir+1,0)=is(0:ir+1,jr)is(0:ir+1,jr+1)=is(0:ir+1,1)do ix=1,irdo jy=1,jrisn=(/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)cyclenr=8*ran(iseed)+1nstate=isn(nr)e=count(isn.ne.nstate)rd=ran(iseed)ig=igv(nstate)-igv(is(ix,jy))de=e-e0+ig+2.5*rd-1.25if(de.lt.0.0)is1(ix,jy)=nstateend doend dodo ix=1,irdo jy=1,jrif(mod(t,20).eq.0)thenisn1=(/is1(ix-1,jy-1),is1(ix-1,jy),is1(ix-1,jy+1),is1(ix,jy-1),! is1(ix,jy+1),is1(ix+1,jy-1),is1(ix+1,jy),is1(ix+1,jy+1)/) isre=setcolor(mod(is(ix,jy),15))if(count(isn1.ne.is1(ix,jy)).gt.0) isre=setcolor(15)isre=setpixel(ix,jy)end ifend doend dowrite(1,*)t,sqrt(1.0*count(is.eq.1)) end doclose(1)end。

相关主题