bonjour tous le monde!
je dois resoudre l'equation de la chaleur 1D en fortran avec la methode analytique. je dois programmer l'equation suivante:
T(x,t)= 1+(ti-1)*somme(pour n allant de 1 jusqu'a l'infini) {4/(n*pi)*sin(n*pi*x)*exp(-(n*pi)²t)
avec n =1,3,5,7...
je l'ai programmé, mais les resultats sont bizarres!
je vous montre mon programme,et si quelqu'un trouve où ca ne va pas, s'il vous plait, dites le moi!
double precision ts(20000)
double precision dt,dx,absx,teta,teta1
integer p
parameter (eps=1e-8)
open(1,file='analytik1.res',access='sequential',status='unknown')
open(2,file='analytik2.res',access='sequential',status='unknown')
open(3,file='analytik3.res',access='sequential',status='unknown')
open(4,file='analytik4.res',access='sequential',status='unknown')
write(*,*)'donner dt,m,itmax et p'
read(*,*)dt,m,itmax,p
dx=1./(m-1)
pi=3.141592654
itemp1=itmax/10
itemp2=itmax/5
itemp3=itmax/2
itemp4=9*itmax/10
WRITE(*,*)itemp1,itemp2,itemp3,itemp4
icount=0
t=0
100 icount=icount+1
c calcul de tpt à t+dt
t=t+dt
teta=0
do 2 i=1,m
do 3 n=1,p,(2)
teta1=teta+((1/(n*pi))*4*sin(n*pi*i)*exp(-(n*n*pi*pi*t)) )
if(abs (teta1-teta).lt.eps) goto 30
teta=teta1
3 continue
30 ts(i)=1-teta1
2 continue
do 56 i=1,m
absx=(i-1.)*dx
if(icount.eq.itemp1)go to 266
if(icount.eq.itemp2)go to 267
if(icount.eq.itemp3)go to 368
if(icount.eq.itemp4)go to 370
go to 269
266 write(1,*)absx,ts(i)
write(*,*)absx,ts(i)
go to 269
267 write(2,*)absx,ts(i)
go to 269
368 write(3,*)absx,ts(i)
go to 269
370 write(4,*)absx,ts(i)
269 continue
56 continue
if(t.gt.itmax)go to 53
goto 100
53 continue
stop
end
Partager