1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
| implicit real nx,nt,u(i),dx,dt,t,x,i
dx=50-(-50)/100
dt=0.1
nx=100
!condition initial
do i=0,nx
if(x<=0) then Un(i)=0
else
Un(i)=1
end do
!solution analytique
do i=0,nx
if x<=0 then Un(i)=0
if 0<x<t then Un(i)=x/t
else Un(i)=1
end if
end if
end do
!construction des condition aux limites
Un(-50)=exact(-50)
Un(50)=exact(50)
!traitement du terme convetif par upwind
do i=0,nx
lamda(i)=0,5*(Un(i)+Un(i+1))
end do
do 100 i=0,nx+1
if lamda(i)>=0 then term1(i)=Un(i)
else
term1(i)=Un(i+1)
end if
if lamda(i-1)>=0 then term2(i)=Un(i-1)
else
term2(i)=Un(i)
end if
convec(i)=(lamda(i)*term(i)-lamda(i-1)*term2(i))
u(i)=Un(i)-0,5*(dt/dx)*conec(i)
100 continue
write u(i),x(i)
end |
Partager