% TESIS
% Estudiante: Rodrigo Brito Interiano
% Asesores: Gerardo Hernandez Duenas y Guillermo Ramirez Santiago
% PROBLEMA DE LA ECUACION DE TRANSPORTE
% u_t+a u_x = 0

function TranspOneSided

%% Datos y condiciones iniciales 

x_0 = -1; 
x_1 = 1;
T = 0.5;
% Valor del coeficiente
a = 1;
% Enmallado
N = 100;
% Delta X
delta_x = (x_1-x_0)/N;
% Dominio
x = zeros(N+4,1);
for j=1:N+1
    x(j,1) = x_0+delta_x*(j-1);
end

x = zeros(N+4,1);
%las celdas van de 1:N, la -1,0 y N+1,N+2 son celdad fantasmas
for j=-1:N+2
    j_shift = j+2;
    x(j_shift,1) = x_0+delta_x*(j-1/2);
end

% Condiciones iniciales
rho_ini = zeros(N+4,1);
rho_exacta = zeros(N+4,1);

for j=-1:N+2
    j_shift = j+2;
    if x(j_shift,1) < 0
        rho_ini(j_shift,1) = 0;
    else
        rho_ini(j_shift,1) = 1;
    end
end


for j=-1:N+2
    j_shift = j+2;
    if x(j_shift,1) < a*T
        rho_exacta(j_shift,1) = 0;
    else
        rho_exacta(j_shift,1) = 1;
    end
end

% Condiciones de frontera
%rho_ini(1)=0;
%rho_ini(length(rho_ini))=0;
% plot(x,rho_ini)
% stop

%% Metodo one-sided 1

% Time step
CFL = 0.9;
dt = CFL*delta_x/abs(a);
nu = a*dt/delta_x;

figure(1)
hold on
plot(x,rho_ini,'black --')
plot(x,rho_exacta,'b -')

t = 0;
rho_old = rho_ini;
rho_new = rho_ini;
while t < T
    % One-sided (Left)
    if 1==1 %a<0
        for j = 1:N
            j_shift = j+2;
            rho_new(j_shift,1) = rho_old(j_shift,1)-nu*(rho_old(j_shift,1)-rho_old(j_shift-1,1));
        end
    else
        for j = 1:N
            j_shift = j+2;
            rho_new(j_shift,1) = rho_old(j_shift,1)-nu/2*(rho_old(j_shift+1,1)-rho_old(j_shift-1,1));
        end
    end
    %Codiciones de frontera Neumann
    rho_new(1:2,1) = rho_new(3,1);
    rho_new(N+3:N+4,1) = rho_new(N+2,1);
    
    rho_old = rho_new;
    t = t+dt;
end
plot(x(3:N+2,1),rho_new(3:N+2,1),'r -','LineWidth',2)


lg = legend('Condicion inicial','Exacta','Centrado','One sided right');
set(lg,'Location','SouthWest')
axis([-1 1 0 1])
print('TransporteOneSidedCFLpt9','-depsc',figure(1))

