0% ont trouvé ce document utile (0 vote)
167 vues13 pages

Les Codes PN

Ce document contient plusieurs programmes Fortran qui simulent des systèmes physiques tels que le modèle d'Ising. Les programmes calculent des propriétés comme l'énergie, l'aimantation et la fonction de partition à différentes températures.

Transféré par

Ismaël Tchagnani
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)
167 vues13 pages

Les Codes PN

Ce document contient plusieurs programmes Fortran qui simulent des systèmes physiques tels que le modèle d'Ising. Les programmes calculent des propriétés comme l'énergie, l'aimantation et la fonction de partition à différentes températures.

Transféré par

Ismaël Tchagnani
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 exoZero

implicit integer(i,n)
IS=0
do i=0,9
IS=IS+i
enddo
write(*,*)"somme=",IS
stop
end

program exoUn
implicit integer(i,n)
open(5,file='pro.in',status='old')
open(8,file='pro.out1',status='unknown')
read(5,*) j
IS1=0
IS2=0
do i=0,j-1
l=mod(i,2)
if(l.eq.0) then
IS1=IS1+i
else
IS2=IS2+i
endif
enddo
IS=IS1+IS2
write(8,*)'IS1=',IS1,'; IS2=',IS2
write(8,*)"somme=",IS
write(*,*)'IS1=',IS1,'; IS2=',IS2
write(*,*)"somme=",IS
stop
end

program exoDeux
implicit integer(i,n)
parameter(n=4,nn=n*n)
integer mat(n,n)
open(1,file='pro.out2',status='unknown')
do i=1,n
do j=1,n
l=i+j
k=mod(l,2)
if(k.eq.0) then
mat(i,j)=0
else
mat(i,j)=1
endif
enddo
enddo
!afficharge des Résultats
do i=1,n
write(1,100) (mat(i,j),j=1 ,n)
write(1,*)
enddo
100 Format(6X,4(I3))
! calcul de hbar
ih=0

do i=1,n
do j=1,n
ih=ih+mat(i,j)
enddo
enddo
hbar=ih/nn

!calcul de omega carré


omega2=0

do i=1,n
do j=1,n
omega2=omega2+((mat(i,j)-hbar)**2)
enddo
enddo
omega2=(1/nn)*omega2
omega=omega2**0.5
write(1,*)'Hbar=',hbar
write(1,*)
write(1,*)'Omega=',omega
write(1,*)
stop
end

program exoTrois
implicit integer(i,n)
parameter(n=4)
integer mat(n,n)
open(3,file='pro.out3',status='unknown')
do i=1,n
do j=1,n
l=i+j
k=mod(l,4)
if(k==0) then
mat(i,j)=2
else if(k.eq.2) then
mat(i,j)=0
else
mat(i,j)=1
endif
enddo
enddo
do i=1,n
write(3,98)(mat(i,j),j=1,n)
enddo
98 Format(6X,4(I3))
end

program exoQuatre
implicit integer(i,n)
real ener(1000)
parameter(nt=3)
integer mat(nt,nt),iener(1000)
open(1,file='pro.out10',status='unknown')
icount=0
do i1=-1,1,2
do i2=-1,1,2
do i3=-1,1,2
do i4=-1,1,2
do i5=-1,1,2
do i6=-1,1,2
do i7=-1,1,2
do i8=-1,1,2
do i9=-1,1,2
mat(1,1)=i1
mat(1,2)=i2
mat(1,3)=i3
mat(2,1)=i4
mat(2,2)=i5
mat(2,3)=i6
mat(3,1)=i7
mat(3,2)=i8
mat(3,3)=i9
icount=icount+1

write(1,*)'configuration numero',icount
do i=1,nt
write(1,20)(mat(i,j),j=1,nt)
write(1,*)
enddo
20 Format(4x,3(I3))
write(1,*)
do i=1,nt
do j=1,nt
ivoish=i-1
if(ivoish.eq.0) ivoish=nt
ivoisb=i+1
if(ivoisb.gt.nt) ivoisb=1
jvoisd=j+1
if(jvoisd.gt.nt) jvoisd=1
jvoisg=j-1
if(jvoisg.eq.0) jvoisg=nt
enddo
enddo
!calcul de l'energie et l'aimantation
IM=0
IE=0
do i=1,nt
do j=1,nt
IE=IE-1*mat(i,j)*(mat(ivoish,j)+mat(ivoisb,j)+mat(i,jvoisd)+mat(i,jvoisg))
IM=IM+mat(i,j)
enddo
enddo
erg=IE/2
aim=IM/(nt*nt)
ener(icount)=erg
write(1,*)'Energie:',erg
write(1,*)
write(1,*)'Aimantation moyenne:',aim
write(1,*)

enddo
enddo
enddo
enddo
enddo
enddo
enddo
enddo
enddo
!fonction de partition Z
pZ=0
do i=1,icount
erg=ener(i)
pb=exp(-erg)
pZ=pZ+pb
enddo
write(1,*)'pZ=',pZ
!calcul de la probabilité tout "+" ou tout"-"
p1=(exp(-ener(1)))/pZ
write(1,*)'tout-'
write(1,*)'proba=',p1
write(1,*)
write(1,*)'tout+'
p2=(exp(-ener(icount)))/pZ
write(1,*)'proba=',p2
stop
end

program exoCinq
implicit integer(i,n)
parameter(nt=4)
integer mat(nt,nt)
open(1,file='pro.in5',status='old')
open(2,file='pro.out5',status='unknown')
do i=1,nt
read(1,*)(mat(i,j),j=1,nt)
enddo
icount=0
do i=1,nt
do j=1,nt
ivh=i-1
if(ivh.eq.0) ivh=nt
ivb=i+1
if(ivb.gt.nt) ivb=1
jvg=j-1
if(ivg.eq.0) jvg=nt
jvd=j+1
if(jvd.gt.nt) jvd=1
ih1=mat(ivh,j)
ih2=mat(ivb,j)
ih3=mat(i,jvg)
ih4=mat(i,jvd)
IH=ih1+ih2+ih3+ih4
if(IH.ge.3) then
icount=icount+1
IX=i
IY=j
write(2,*)'Icount=',icount
write(2,*)'IX=',IX
write(2,*)'IY=',IY
write(2,*)'IH',icount,'=',IH
write(*,*)'Icount=',icount
write(*,*)'IX=',IX
write(*,*)'IY=',IY
write(*,*)'IH',icount,'=',IH
endif
enddo
enddo
stop
end

program exoSixCo
implicit integer(i,n)
real t(100)
open(1,file='pro.in6',status='old')
open(2,file='pro.out6corrige',status='unknown')
read(1,*) eps
read(1,*) dmu
i=0
F=0
t(1)=0.1
do j=2,40
t(j)=(t(j-1))+0.1
enddo
do j=1,40
q=exp(dmu/t(j))
v=exp(eps/t(j))
a1=q/(1+v)
a2=a1
a3=a1
a4=a1
a5=q/2
a6=q/(1+v**2)
a7=q/(1+v**(-1))
a8=a7
b1=(6*a5*(a3+a6)+2*a6*a5)*a6*a2
b2=a1*a7*a8*a4
c1=a2*a6*(a3+a6)
c2=2*a5*a6*(a3+a6)
c3=2*a5*a3*a2+a5*a6**2
G=(0.5)*((b1+b2)/(c1+c2+c3))
i=i+1
if(G.gt.F) F=G
write(2,*)'numero:',i
write(2,*)'t=',t(j)
write(2,*)'G=',G

write(*,*)'numero:',i
write(*,*)'t=',t(j)
write(*,*)'G=',G
enddo
write(2,*)'le G maximum est:',F
write(*,*)'le G maximum est:',F
stop
end

program exoSept
implicit integer(i,n)
parameter (nt=4)
integer Mat(nt,nt)
open(1,file='pro.in7',status='old')
open(2,file='pro.out7',status='unknown')
do i=1,nt
read(1,*)(Mat(i,j),j=1,nt)
enddo
do l=1,6
r1=rand(0)
r2=rand(0)
ich=1+r1*nt
ich=min(ich,nt)
jch=1+r2*nt
jch=min(jch,nt)
ih=ich-1
if(ih.eq.0) ih=nt
ib=ich+1
if(ib.gt.nt) ib=1
jg=jch-1
if(jg.eq.0) jg=nt
jd=jch+1
if(jd.gt.nt) jd=1
ivois1=Mat(ih,jch)
ivois2=Mat(ich,jd)
ivois3=Mat(ib,jch)
ivois4=Mat(ich,jg)
itot=ivois1+ivois2+ivois3+ivois4

if(itot.eq.0) then
Mat(ich,jch)=-Mat(ich,jch)
endif
enddo

do i=1,nt
write(2,300) (Mat(i,j),j=1,nt)
write(2,*)
enddo
300 Format(5X,4(I4))
ends

program integralMCun
implicit integer(i,n)
open(2,file='pro.out3',status='unknown')
write(*,*)'donne nsin:'
read(*,*)nsin
pi=3.14159265
ab=pi/6
Xab=0
do i=1,nsin
r=rand(0)
arg=ab*r
Xab=Xab+((sin(arg+pi/6))**2)*cos(arg-pi/6)*ab
enddo
res=Xab/nsin
write(2,*)"integral I=",res
write(*,*)"integral I=",res
stop
end

program mcSimulUN
implicit integer(i,n)
real r,x(100000), y(100000), yy
nsim=1000 ! nbre d'experience
npas=100000 ! temps total

do i=1,npas
x(i)=0
y(i)=0
enddo
do isim=1,nsim
yy=0 !position de depart
do ipas=1,npas
r=rand(0)
if(r.le.0.5) then
istep=1
else
istep=-1
endif
yy=yy+istep
x(ipas)=x(ipas)+yy
y(ipas)=y(ipas)+yy*yy
enddo
enddo
do i=1,npas
write(10,*) i,x(i)/nsim!x(t) bar
write(11,*) i,y(i)/nsim!x(t) carre bar
enddo
end

program depotAleatoire
implicit integer(i,n)
parameter(mt=200)
integer mat(mt,mt)
real rmc(100000)
open(1,file='depo.in',status='old')
open(2,file='depo.out2',status='unknown')
read(1,*)nt
read(1,*)npas
read(1,*)nsim
do i=1,10000
rmc(i)=0
enddo
do isim=1,nsim
icount=0
do i=1,nt
do j=1,nt
mat(i,j)=0
enddo
enddo
do ipas=1,npas
do imc=1,nt*nt
r1=rand(0)
ix=1+r1*nt
ix=min(ix,nt)
r2=rand(0)
iy=1+r2*nt
iy=min(iy,nt)
mat(ix,iy)=mat(ix,iy)+1
enddo
imod=mod(ipas,100)
if(imod.eq.0)then
ih=0
do i=1,nt
do j=1,nt
ih=ih+mat(i,j)
enddo
enddo
hbar=1.*ih/(nt*nt)
omega2=0
do i=1,nt
do j=1,nt
omega2=omega2+(1.*mat(i,j)-hbar)**2
enddo
enddo
omega2moy=omega2/(nt*nt)
omega=omega2moy**0.5
icount=icount+1
rmc(icount)=rmc(icount)+omega
endif
enddo
enddo
do i=1,icount
write(2,*) 100*i,rmc(i)/nsim
enddo
stop
end

Program ising
implicit integer(i,n)
parameter(mt=100,nn=mt*mt)
integer mat(mt,mt)
!
common/mat1/ip(mt),jp(mt)
open(1,file='pro20.in',status='old')
open(2,file='Ising1.out',status='unknown')
open(3,file='Ising2.out',status='unknown')
!
read(1,*)nt
read(1,*)tdebut,tfinal,tpas
read(1,*)npas,nther
read(1,*)nsim
read(1,*)hj

do i=1,nt
ip(i)=i+1
jp(i)=i-1
enddo
ip(nt)=1
jp(1)=nt

do t=tdebut,tfinal,tpas
!
aim=0
ener=0
icount=0

do isim=1,nsim
write(*,*)'exprience numero',isim
! creaction d'une matrice de confiduration initale
do i=1,nt
do j=1,nt
mat(i,j)=-1 ! tous les spin down
enddo
enddo

do ipas=1,npas
do imc=1,nt*nt
r1=rand(0)
r2=rand(0)
ich=1+r1*nt
ich=min(ich,nt)
jch=1+r2*nt
jc=min(jch,nt)
isp=mat(ich,jch)
if(isp.eq.1) then
nisp=-1
else
nisp=1
endif
!calcul du poids de boltzmann

n1=mat(jp(ich),jch)
n2=mat(ich,jp(jch))
n3=mat(ip(ich),jch)
n4=mat(ich,ip(jch))
deltaE=-hj*(nisp-isp)*(n1+n2+n3+n4)
pb=min(1.,esp(-deltaE/a))
r3=rand(0)
if(pb.ge.r3) then
mat(ich,jch)=nisp
endif
enddo !imc
if(ipas.gt.nther) then
ips=0
em=0
do i=1,nt
do j=1,nt
ips=ips+mat(i,j)
m1=mat(jp(i),j)
m2=mat(i,jp(j))
!energie
em=-hj*nisp*(m1+m2)

enddo
enddo
psbar=abs(1.*ips/nn)
embar=em/nn
aim=aim+psbarProgram ising
implicit integer(i,n)
parameter(mt=100,nn=mt*mt)
integer mat(mt,mt)
!
common/mat1/ip(mt),jp(mt)
open(1,file='pro20.in',status='old')
open(2,file='Ising1.out',status='unknown')
open(3,file='Ising2.out',status='unknown')
!
read(1,*)nt
read(1,*)tdebut,tfinal,tpas
read(1,*)npas,nther
read(1,*)nsim
read(1,*)hj

do i=1,nt
ip(i)=i+1
jp(i)=i-1
enddo
ip(nt)=1
jp(1)=nt

do t=tdebut,tfinal,tpas
!
aim=0
ener=0
icount=0

do isim=1,nsim
write(*,*)'exprience numero',isim
! creaction d'une matrice de confiduration initale
do i=1,nt
do j=1,nt
mat(i,j)=-1 ! tous les spin down
enddo
enddo

do ipas=1,npas
do imc=1,nt*nt
r1=rand(0)
r2=rand(0)
ich=1+r1*nt
ich=min(ich,nt)
jch=1+r2*nt
jc=min(jch,nt)
isp=mat(ich,jch)
if(isp.eq.1) then
nisp=-1
else
nisp=1
endif
!calcul du poids de boltzmann

n1=mat(jp(ich),jch)
n2=mat(ich,jp(jch))
n3=mat(ip(ich),jch)
n4=mat(ich,ip(jch))
deltaE=-hj*(nisp-isp)*(n1+n2+n3+n4)
pb=min(1.,esp(-deltaE/a))
r3=rand(0)
if(pb.ge.r3) then
mat(ich,jch)=nisp
endif
enddo !imc
if(ipas.gt.nther) then
ips=0
em=0
do i=1,nt
do j=1,nt
ips=ips+mat(i,j)
m1=mat(jp(i),j)
m2=mat(i,jp(j))
!energie
em=-hj*nisp*(m1+m2)

enddo
enddo
psbar=abs(1.*ips/nn)
embar=em/nn
aim=aim+psbar
ener=ener+embar
icount=icount+1

endif
enddo
enddo
xmag=aim/1.*icount
emag=ener/1.*icount
write(2,*)t,xmag

write(3,*)t,emag
enddo
stop
end program
ener=ener+embar
icount=icount+1

endif
enddo
enddo
xmag=aim/1.*icount
emag=ener/1.*icount
write(2,*)t,xmag

write(3,*)t,emag
enddo
stop
end program

Personne n'est parfait.


Mais il faut bien lire

Vous aimerez peut-être aussi