%% Euler forward Dirichlet
L = 1;  % domain size (in the lecture notes this is denote h)
T = 2;  % time limit (max time)
f = @(x,t) 0*x.*t;    % rhs of the more general equation `u_t - d u_xx = f`
c1 = @(t) 1+0*t;      % _right_ boundary condition
c2 = @(t) 0*t;        % _left_ boundary condition
u0 = @(x) 0*x;        % initial values
D = 0.5;              % diffusion parameter `d` in `u_t - d u_xx = f`
%uex = @(x,t) cos(x).*exp(t);

N = 10;               % nr. of _space_ discretization points
K = 200;              % nr. of _time_ discretization points
[x, t, u] = Dirichlet_EA(L, N, T, K, c1, c2, f, u0, D);

% Report stability condition `D Delta T / (Delta x)^2 > 0.5`
Delta_T = T / K;
Delta_x = L / N;
d = D * Delta_T / Delta_x^2;
fprintf("Stability Condition: 0.5 >= D * Delta_T / Delta_x^2 = %f\n", d)
if d > 0.5
    fprintf("-> NOT Stable\n")
else
    fprintf("-> Stable\n")
end

figure(1)
for ii = 1:K+1 % iterates time
    hold on
    plot(x, u(:, ii)');
    xlim([0 L])
    pause(0.05);
    hold off
end

% 3D plot of space solution over time
space = linspace(0,L,101);
time = linspace(0,T,201);
[xx,yy] = meshgrid(time,space);
%exsol = uex(yy,xx);
figure(2)
mesh(t,x,u)
%figure(2)
%mesh(xx,yy,exsol)

%% Eulero forward Mixed BC

L=2*pi;
T=5;
f=@(x,t) 0*x.*t;
c1=@(t) 1+0*t;
c2=0;
u0=@(x) 0*x;
D=1.1;
%uex=@(x,t) cos(x).*exp(t);

N=25;
K=200;
[x,t,u]=Mixed_EA(L,N,T,K,c1,c2,f,u0,D);

figure(1)
for ii=1:K+1 
    plot(x,u(:,ii)');
    xlim([0 L])
    ylim([0 1.5])
    pause(0.02);
end

space=linspace(0,L,101);
time=linspace(0,T,201);
[xx,yy]=meshgrid(time,space);
%exsol=uex(yy,xx);
figure(2)
mesh(t,x,u)
%figure(2)
%mesh(xx,yy,exsol)

%% Eulero Backward Mixed BC

L=2*pi;
T=5;
f=@(x,t) 0*x.*t;
c1=@(t) 1+0*t;
c2=0;
u0=@(x) 0*x;
D=1;
%uex=@(x,t) cos(x).*exp(t);

N=25;
K=200;
[x,t,u]=Mixed_EI(L,N,T,K,c1,c2,f,u0,D);

figure(1)
for ii=1:K+1 
    plot(x,u(:,ii)');
    xlim([0 L])
    ylim([0 1.5])
    pause(0.02);
end

space=linspace(0,L,101);
time=linspace(0,T,201);
[xx,yy]=meshgrid(time,space);
%exsol=uex(yy,xx);
figure(2)
mesh(t,x,u)
%figure(2)
%mesh(xx,yy,exsol)
