% 10. gyakorlat
% Grey-Scott rendszer 1D-ben: stabil mintázatképzõdés
    %du/dt = Du*du^2/dx^2-u*v^2+F*(1-u);
    %dv/dt = Dv*du^2/dx^2+u*v^2-(C+F)*v;
% 0 és 1 közti koncentráció értékek
% [0,1] tarományon nézzük a gradienst

% Feladatok, kérdések:
% Implementáljuk a Gray-Scott rendszert.
% Mit tapasztalunk, hogy viselkedik a rendszer?
% Mennyire érzékeny a rendszer a paraméterekre? 
% Más C, F paraméterekkel is kialakul mintázat? 
% Mit tapasztalunk a Dv diffúziós paramétert változtatva? Mikor kezd megjelenni a stabil mintázat?
% Mennyire érzékeny a rendszer a kezdeti állapotra? 

dt = 0.2; %idõbeli lépésköz %D*2*dt/dx^2<1
dx = 1/100; %térbeli lépésköz

x = 0:dx:1;
nx = length(x);
nt = 50000;%200000; %lépésszám

% diffúziós együtthatók: diff sebességét határozza meg (hat a mintázatra)
Du=6e-5; %5e-5;%7e-5;
Dv=2e-5; %1e-5;

% paraméterek: más paraméterekkel is lehet (más) mintázat
C = 0.065;%0.075;%%0.065;%0.055;%0.015; %fogyás 
F = 0.06; %0.1;%0.08;%%0.06;%0.03;%0.04 %termelõdés

% kezdeti feltételek: u=1; v=0 alapból (0-1 közt cc-k)
u = ones(nx,1);
%u(10:30) = 0; %szakasz, ahol kezdetben nincs u
v = zeros(nx,1);
v(20:40) = 1; %szakasz ahol kezdetben is van v
%u=ones(nx,1).*rand(nx,1); % kell adott kiterjedésû és nagyságú kezdeti inhomogenitás, a mintázat kialakulásához (egyébként homogenizálódik a rendszer), a sávok helyzetet változhat ennek függvényében 
%v=ones(nx,1).*rand(nx,1);

%
% színek a mintázathoz az adott idõpontban, colormap-et definiál
pic=zeros(1, nx, 3); %3D-s rgb colormap (piros és kék színek kombinációi)
pic(:,:,1)=u'; %piros (0 1 közti értékek)
pic(:,:,3)=v'; %kék (0 1 közti értékek)

%a végén megjelenített összesítõ szín kép: az egész folyamatot mutatja
bigpic=zeros(nt+1,nx,3);
bigpic(1,:,1)=u';
bigpic(1,:,3)=v';
%}

figure; %ábrázolás
subplot(2,1,1)
plot(x, u, 'r', x, v, 'b');
 ylim([-0.5,1.5]);
 ylabel('koncentráció');
 
subplot(2,1,2)
image(pic); %a 3D-s rgb mátrix színes képként kirajzolása (ez magának a gradiensnek a képe)
 
   waitforbuttonpress;
   
for t = 1:nt %idõlépések
    u2 = u;
    v2 = v;
    
    for i =1:nx
            
            if i==1 %periodikus peremek
               i_before=nx;
            else 
                i_before=i-1;
            end
            if i==nx
                i_after=1;
            else
                i_after=i+1;
            end
             
            % Grey-Scott egyenletek:
             u(i) = u2(i) + dt*(-u2(i))*v2(i)^2 +dt*F*(1-u2(i)) +...
                                 Du*dt/dx^2*(u2(i_after)-2*u2(i)+u2(i_before));            
             v(i) = v2(i) + dt*u2(i)*v2(i)^2 -(C+F)*dt*v2(i) +...
                                 Dv*dt/dx^2*(v2(i_after)-2*v2(i)+v2(i_before));                            

    end
    
    if mod(t, 100)==0 %minden x. lépésben rajzolok csak ki
    subplot(2,1,1)
    plot(x, u, 'r', x, v, 'b');
    title(['lépés: ', num2str(t)]);
    ylim([-0.5,1.5]);
    ylabel('koncentráció');
    
    %
    subplot(2,1,2)
    pic(:,:,1)=u'; % (0 1 közti értékek)
    pic(:,:,3)=v'; % (0 1 közti értékek)
    image(pic);
    %}
    
   %waitforbuttonpress;
    pause(0.01);
    end
    
    bigpic(t+1,:,1)=u'; % (0 1 közti értékek)
    bigpic(t+1,:,3)=v'; % (0 1 közti értékek)
    
end

% a mintázat alakulása az idõben:
figure;
image(bigpic);
ylabel ('idõ');