//
//-------------------------------------------------------------
// ---------   équation de transport  -------------------------                 schéma décentré amont
//-------------------------------------------------
///////////////////////////////////////////////////
//
// observer l'effet du choix du pas de temps
// 
// pour que le schéma soit stable il doit satisfaire
// la condition CFL: dt<CFL
////////////////////////////////////////////////////

clf()
clear all;
//
L=10;                   // longueur du segment simulé
N=100;                   // nbre de points en espace
dx=L/N;                 // pas en espace
lambda=1;               // vitesse de propagation
//
CFL=dx/lambda;        // valeur CFL (=dtmax)
dt=0.99*CFL;          // choix de dt
Tfin=50;              // temps final 
Ntps=int(Tfin/dt);
//
U=zeros(N+1,1);   
//      
///initialisation de U (fonction créneau) /////////
//
for i=1:N+1
    if  ((i-1)*dx>L/3)&((i-1)*dx<2*L/3) then
         U(i)=1;
    end
end
////matrice A (triangulaire inférieure) ////////////
//
A=zeros(N+1,N+1);
A(1,1)=1-lambda*dt/dx;
for i=2:N+1
    A(i,i)=1-lambda*dt/dx;
    A(i,i-1)=lambda*dt/dx;
end    
///////////////début boucle en temps////////////
for i=1:Ntps
   Unew=A*U; 
   U(1)=U(N+1)-dt*lambda*((U(N+1)-U(N))/dx);
   U=[U(1);Unew(2:N+1)];
   /////// tracé dynamique/////////////
   drawlater
   clf()
   plot2d(0:dx:L,U,rect=[0,0,L,1.1])
   drawnow
end
//////////////////fin boucle en temps/////////////




