0% ont trouvé ce document utile (0 vote)
10 vues3 pages

Simulation du modèle Ising en Fortran

Transféré par

katia.mayouf.2
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
10 vues3 pages

Simulation du modèle Ising en Fortran

Transféré par

katia.mayouf.2
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

program ising

implicit none
real ,allocatable :: is(:,:)
integer, allocatable::km(:),kp(:)
real::de,r,ei,p,M,t,e,cv,e1,e2,a,b,Mtotabs,Mtotsq,khi
integer::i,j,n,itmax,it,k

!write(*,*) "input n"


read(*,*) n
allocate(is(n,n))
allocate(km(n))
allocate(kp(n))
!basse température
itmax=1000

!conditions aux limites périodiques


do i=1,n-1
kp(i)= i+1
end do

do i=2,n
km(i)= i-1
end do
kp(n)=1
km(1)=n

!le remplissage de la matrice


do i=1,n
do j=1,n

is(i,j)=1

end do
end do

!l'affichage de la matrice

!do i=1,n

!write (*,*) (is(i,j) ,j=1,n)

!end do

!étude systématique

do k=50,0,-1
t= k*0.1
!n=64
Mtotabs=0.
Mtotsq=0.
e1=0.
e2=0.
do it=1,itmax

do i=1,n
do j=1,n
ei=-1*is(i,j)*(is(kp(i),j)+is(km(i),j)+is(i,kp(j))+is(i,km(j)))
de=-2*ei

!le test sur delta e

if (de<=0 ) then
is(i,j)=-1*is(i,j)
end if

if (de>0 ) then
p=exp(-de/t)
r=rand()
if (p>r) then
is(i,j)= -1*is(i,j)
else
is(i,j)= is(i,j)
end if
end if

end do
end do

!do i=1,n
!write (*,*) (is(i,j) ,j=1,n)
!end do
!calcul de l'aimentation
M=0.
do i=1,n
do j=1,n

M=M+is(i,j)

end do
enddo
!fin des visites mc
!parmètre d'ordre de la dernière visite

!M= abs(M)

! calcul de l'energie
!e=0.
e=0.
do i= 1,n
do j=1,n

ei=-1*is(i,j)*(is(kp(i),j)+is(km(i),j)+is(i,kp(j))+is(i,km(j)))

e=e+ei
end do
end do
e=e/2

e1=e1+e
e2=e2+e**2
Mtotabs=Mtotabs+abs(M)
Mtotsq=Mtotsq+M*M

enddo
Mtotabs= Mtotabs/itmax
Mtotsq=Mtotsq/itmax

M=M/(n*n)

cv= (e2/itmax-e1*e1/(itmax*itmax))/(t*t)

khi=(Mtotsq/itmax-Mtotabs*Mtotabs/(itmax*itmax))/(t*t)

!write(*,*) t,M,e,cv
write(*,*) t,khi
!write(*,*) t,Mtotabs,(Mtotsq-Mtotabs)/t
end do ! temp
end

Vous aimerez peut-être aussi