%
% Simulation de la rage : 20.12 p 661 de Murray (Springer)
% on voit apparaitre une onde progressive qui se deplace vers
% la gauche 
% Recherche de solutions stationnaires: on recentre a chaque pas
% de temps pour avoir S = 0.8 aux 4/5eme de l'ecran
%

Nombremaille = 200
dt = 0.2
Longueur = 100
dx=Longueur/Nombremaille
lambda=0.5;


%
% Initialisation : S=1 et R=0, sauf sur une petite zone sur laquelle 
% on introduit R=0.1
%

for I=1:Nombremaille,
	S(I)=1;
	R(I)=0;
end

for I=1:10,
	R(I)=0.1;
end

%
% Matrice du laplacien
% (diffusion traitée de façon implicite)
%

A='';
for I=2:Nombremaille-1,
	A(I,I)=-2;
	A(I-1,I)=1;
	A(I+1,I)=1;
end

A(1,1)=-1;
A(2,1)=1;
A(Nombremaille,Nombremaille)=-1;
A(Nombremaille-1,Nombremaille)=1;

AA = eye(Nombremaille) - A*(dt/(dx^2));

B = inv(AA);

%
% Boucle de calcul
%

for J=1:100000,

%
% Etape reaction (equation diff ordinaire)
% Traitée par la méthode d'Euler explicite.
%

for I=1:Nombremaille,
	dS(I)=-S(I)*R(I);
	S(I)=S(I)+dt*dS(I);
	R(I)=R(I)-dt*dS(I)-dt*lambda*R(I);
end


%
% Etape diffusion
%

R= (B*R')';

%
% Etape de recentrage. On ne recentre que dans un sens, qui correspond
% au "régime de croisière". SSi on recentrait dans l'autre sens, on aurait
% des problèmes au début. 
% On Recentre pour avoir S=0.8 aux 4/5eme.
%

Indice=Nombremaille/2;
for I=1:Nombremaille,
	if S(I)< 0.8
		Indice=I;
	end
end

Translation=-Indice+4*Nombremaille/5
Translat=abs(Translation);

if Translation < 0
	for I=1:Nombremaille-Translat,
		R(I)=R(I+Translat);
		S(I)=S(I+Translat);
	end
%
% On prolonge le solution.
%
	for I=Nombremaille-Translat:Nombremaille,
		R(I)=0;
		S(I)=1;
	end
end


	

%
% Affichage de S et de R
%

figure(1)
clf
plot(S);
axis([0 Nombremaille 0 1]);
hold on
plot(R,'green');
drawnow

%
% NB: On pourrait aussi tracer la courbe de la translation de la courbe : 
% on s'apercevrait qu'elle avance à une vitesse quasi-constante. Le problème 
% principal est que l'on décale d'un nombre de pas entiers. On aurait en fait 
% une courbe oscillante, sauf à moyenner ce décalage sur un certain nombre de 
% pas temporels.
% 


end






