Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DHomogeneousDirichlet.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
% - u'' = 1, 0 < x < 1, u(0) = 0, u(1) = 0
% exact solution: u(x) = x(1-x)/2
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -22,7 +22,7 @@
v = [0;0];
A = - lap(k,m,dx);
b = ones(size(A,2),1);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
Expand Down
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DLeftDirichletRightNeumann.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
% - u'' = 1, 0 < x < 1, u'(0) = 0, u(1) = 0
% exact solution: u(x) = (1 - x^2)/2
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -22,7 +22,7 @@
v = [0;0];
A = - lap(k,m,dx);
b = ones(size(A,2),1);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
Expand Down
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DLeftDirichletRightRobin.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
% b = 400, c = 10, d = 15
% So, E = (pi - 3985)/401, F = 10
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -28,7 +28,7 @@
v = [10;15];
A = - lap(k,m,dx);
b = pi^2 * sin(pi*xc);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
Expand Down
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DLeftNeumannRightNeumann.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
% Compatibility condition:
% integ(f) = integ(-u'') = - u'(1) + u'(0)
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -24,7 +24,7 @@
v = [0;0];
A = - lap(k,m,dx);
b = xc - 0.5*ones(size(A,2),1);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution (there are infinity solutions)
ua = ua - ua(1) + ue(1); % shifting ua to match ue(1) with ua(1)

Expand Down
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DLeftNeumannRightRobin.m
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
% b = 400, c = 10, d = 15
% So, E = - (10 + pi), F = (402 pi + 4025)/400
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -28,7 +28,7 @@
v = [10;15];
A = - lap(k,m,dx);
b = pi^2 * sin(pi*xc);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
Expand Down
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DLeftRobinRightRobin.m
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
% a = -200, b = 400, c = 10, d = 15
% So, E = (35 - pi)/403, F = (402 pi - 3995)/80600
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -30,7 +30,7 @@
v = [10;15];
A = - lap(k,m,dx);
b = pi^2 * sin(pi*xc);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
Expand Down
4 changes: 2 additions & 2 deletions examples/matlab/elliptic1DNonHomogeneousDirichlet.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
% - u'' = 1, 0 < x < 1, u(0) = 1/2, u(1) = 1/2
% exact solution: u(x) = (-x^2 + x + 1)/2
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D
%
close all; clc;

Expand All @@ -22,7 +22,7 @@
v = [1/2;1/2];
A = - lap(k,m,dx);
b = ones(size(A,2),1);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
Expand Down
34 changes: 34 additions & 0 deletions examples/matlab/elliptic1DNonPeriodicBC.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
% ====================== Test 1 =====================
% 1D Poisson BVP: Dirichlet, Dirichlet Homogeneous BC
% - u'' = 1, 0 < x < 1, u(0) = 0, u(1) = 0
% exact solution: u(x) = x(1-x)/2
% ===================================================
% example that uses addScalarBC1D with non-periodic boundary conditions
%
close all; clc;

addpath('../../src/matlab');

k = 2;
bvp = 1;
m = 2*k+1;
dx = 1/m;
% centers and vertices
xc = [0 dx/2:dx:1-dx/2 1]';
t = '- u" = 1, 0 < x < 1, u(0) = 0, u(1) = 0, with exact solution u(x) = x(1-x)/2';
ue = 0.5*xc.*(1-xc); % exact solution
dc = [1;1];
nc = [0;0];
v = [0;0];
A = - lap(k,m,dx,dc,nc);
b = ones(size(A,2),1);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution

% plot
figure(bvp)
plot(xc,ue,'b*',xc,ua,'ro');
title(t); %,'interpreter','latex');
xlabel('x');
ylabel('u');
legend({'exact','approx'});
8 changes: 4 additions & 4 deletions examples/matlab/elliptic1DPeriodicBC.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
% - u'' = 4 pi^2 sin(2 pi x), 0 < x < 1, u(0) = u(1), u'(0) = u'(1)
% exact solution: u(x) = sin(2 pi x) + constant
% ===================================================
% example that uses addBC1D
% example that uses addScalarBC1D with periodic boundary conditions
% testing 1D bc
%
close all; clc;
Expand All @@ -15,15 +15,15 @@
m = 20;
dx = 1/m;
% centers and vertices
xc = [0 dx/2:dx:1-dx/2 1]';
xc = (dx/2:dx:1-dx/2)';
t = '- u" = 4 pi^2 sin(2 pi x), 0 < x < 1, u(0) = u(1), u''(0) = u''(1), with exact solution u(x) = sin(2 pi x) + constant';
ue = sin(2*pi*xc); % exact solution
dc = [0;0];
nc = [0;0];
v = [0;0];
A = - lap(k,m,dx);
A = - lap(k,m,dx,dc,nc);
b = 4*pi^2 * sin(2*pi*xc);
[A0,b0] = addBC1D(A,b,k,m,dx,dc,nc,v);
[A0,b0] = addScalarBC1D(A,b,k,m,dx,dc,nc,v);
ua = A0\b0; % approximate solution (there are infinity solutions)
ua = ua - ua(1) + ue(1); % shifting ua to match ue(1) with ua(1)

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
% Solves the 1D Poisson's equation with Robin boundary conditions
% same example as elliptic1D that uses addScalarBC1D
%

clc
close all
Expand All @@ -20,7 +22,7 @@

L = lap(k, m, dx); % 1D Mimetic laplacian operator
U = exp(grid)'; % RHS
[L0,U0] = addBC1D(L,U,k,m,dx,dc,nc,v); % add BC to system
[L0,U0] = addScalarBC1D(L,U,k,m,dx,dc,nc,v); % add BC to system
U0 = L0\U0; % Solve a linear system of equations

% Plot result
Expand Down
44 changes: 44 additions & 0 deletions examples/matlab/elliptic2DPeriodic.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
% ====================== Test 2 =====================
% 2D Poisson BVP: Periodic, Periodic domain
% u_xx + u_yy = exp(- 10(x^2 + y^2)), -1 < x,y < 1,
% BC: periodic
% exact solution: unknown
% ===================================================
% example that does not use addScalarBC2D
%
close all; clc;

addpath('../../src/matlab');

k = 2;
bvp = 2;
m = 49; % it should be odd
n = m+2; % it should be odd
dx = 2/m;
dy = 2/n;
% centers and vertices
xc = (-1+dx/2:dx:1-dx/2)';
yc = (-1+dy/2:dy:1-dy/2)';
[Y,X] = meshgrid(yc,xc);
% t = 'u_xx + u_yy = exp(-10(x^2+y^2)), -1 < x,y < 1, periodic boundary conditions. Unknown exact solution';
dc = [0;0;0;0];
nc = [0;0;0;0];
bcl = 0; bcr = 0; bcb = 0; bct = 0;
v = {bcl;bcr;bcb;bct};
A = - lap2D(k,m,dx,n,dy,dc,nc);
b = - exp(-10*(X.^2 + Y.^2));
src = - exp(-10*(X.^2 + Y.^2));
b = reshape(b,[],1);
[A0,b0] = addScalarBC2D(A,b,k,m,dx,n,dy,dc,nc,v);
ua = A0\b0; % approximate solution
ua = reshape(ua,m,n);
ua = ua - ua((m+1)/2,(n+1)/2);

figure(bvp)
surf(X,Y,ua);
title('Approximate Solution: 2D Poisson with Periodic BC');
shading interp;
figure(bvp+10)
surf(X,Y,src);
title('Source term: 2D Poisson with Periodic BC');
shading interp;
6 changes: 3 additions & 3 deletions examples/matlab/elliptic2DXDirichletYDirichlet.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
% BC: u(x,0) = e^x, u(x,pi) = - e^x, u(0,y) = cos(y), u(pi,y) = e^pi cos(y)
% exact solution: u(x,y) = e^x cos(y)
% ===================================================
% example that uses addBC2D
% example that uses addScalarBC2D
%
close all; clc;

Expand All @@ -31,10 +31,10 @@
bcl = bcl(2:end-1,1);
bcr = bcr(2:end-1,1);
v = {bcl;bcr;bcb;bct};
A = - lap2D(k,m,dx,n,dy);
A = - lap2D(k,m,dx,n,dy,dc,nc);
b = zeros(m+2,n+2);
b = reshape(b,[],1);
[A0,b0] = addBC2D(A,b,k,m,dx,n,dy,dc,nc,v);
[A0,b0] = addScalarBC2D(A,b,k,m,dx,n,dy,dc,nc,v);
ua = A0\b0; % approximate solution
ua = reshape(ua,m+2,n+2);

Expand Down
46 changes: 46 additions & 0 deletions examples/matlab/elliptic2DXPerYDirichlet.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
% ====================== Test 5 =====================
% 2D Poisson BVP: Periodic BC along X-axis and Dirichlet along Y-axis
% -(u_xx + u_yy) = 2 sin(2 pi x) (1+2 pi^2 y(1-y)), 0 < x,y < 1, u(x,0) = 0 = u(x,1)
% exact solution: u(x) = y(1-y)sin(2 pi x)
% ===================================================
% example that uses addScalarBC2D
%
close all; clc;

addpath('../../src/matlab');

k = 2;
bvp = 5;
m = 20;
n = m+1;
dx = 1/m;
dy = 1/n;
% centers and vertices
xc = (dx/2:dx:1-dx/2)';
yc = [0 dy/2:dy:1-dy/2 1]';
[Y,X] = meshgrid(yc,xc);
t = '-(u_xx + u_yy) = 2 sin(2 pi x) (1+2 pi^2 y(1-y)), 0 < x,y < 1, periodic along x, u(x,0) = 0 = u(x,1), with exact solution u(x) = y(1-y)sin(2 pi x)';
dc = [0;0;1;1];
nc = [0;0;0;0];
bcl = 0; % zeros(n,1);
bcr = 0; % zeros(n,1);
bct = zeros(m,1);
bcb = zeros(m,1);
v = {bcl;bcr;bcb;bct};
ue = Y.*(1-Y).*sin(2*pi*X); % exact solution
A = - lap2D(k,m,dx,n,dy,dc,nc);
b = 2*sin(2*pi*X).*(1+2*pi^2*Y.*(1-Y));
b = reshape(b,[],1);
[A0, b0] = addScalarBC2D(A, b, k, m, dx, n, dy, dc, nc, v);
ua = A0\b0; % approximate solution (there are infinity solutions)
ua = reshape(ua,m,n+2);

% plot
figure(bvp)
surf(X,Y,ua);
title('Approximate Solution: 2D Poisson with Periodic BC along X and Dirichlet on Y');
shading interp;
figure(bvp+10)
surf(X,Y,ue);
title('Exact Solution: 2D Poisson with Periodic BC along X and Dirichlet on Y');
shading interp;
20 changes: 10 additions & 10 deletions examples/matlab/elliptic2DXPeriodicYPeriodic.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
% BC: periodic
% exact solution: unknown
% ===================================================
% example that uses addBC2D
% example that uses addScalarBC2D
%
close all; clc;

Expand All @@ -18,24 +18,24 @@
dx = 2/m;
dy = 2/n;
% centers and vertices
xc = [-1 -1+dx/2:dx:1-dx/2 1]';
yc = [-1 -1+dy/2:dy:1-dy/2 1]';
xc = (-1+dx/2:dx:1-dx/2)';
yc = (-1+dy/2:dy:1-dy/2)';
% xc = [-1 -1+dx/2:dx:1-dx/2 1]';
% yc = [-1 -1+dy/2:dy:1-dy/2 1]';
[Y,X] = meshgrid(yc,xc);
% t = 'u_xx + u_yy = exp(-10(x^2+y^2)), -1 < x,y < 1, periodic boundary conditions. Unknown exact solution';
dc = [0;0;0;0];
nc = [0;0;0;0];
bcl = zeros(n,1);
bcr = zeros(n,1);
bct = zeros(m+2,1);
bcb = zeros(m+2,1);
bcl = 0; bcr = 0; bct = 0; bcb = 0;
v = {bcl;bcr;bcb;bct};
A = - lap2D(k,m,dx,n,dy);
A = - lap2D(k,m,dx,n,dy,dc,nc);
b = - exp(-10*(X.^2 + Y.^2));
src = b;
b = reshape(b,[],1);
[A0,b0] = addBC2D(A,b,k,m,dx,n,dy,dc,nc,v);
[A0,b0] = addScalarBC2D(A,b,k,m,dx,n,dy,dc,nc,v);
ua = A0\b0; % approximate solution
ua = reshape(ua,m+2,n+2);
ua = reshape(ua,m,n);
% ua = reshape(ua,m+2,n+2);
ua = ua - ua((m+1)/2,(n+3)/2);

figure(bvp)
Expand Down
7 changes: 3 additions & 4 deletions examples/matlab/elliptic3DXDirichletYDirichletZDirichlet.m
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
% BC: u(-1,y,z) = -1+y^3+z^3, u(1,y,z) = 1+y^3+z^3, u(x,-1,z) = -1+x^3+z^3, u(x,1,z) = 1+x^3+z^3, u(x,y,-1) = -1+x^3+y^3, u(x,y,1) = 1+x^3+y^3,
% exact solution: u(x,y,z) = x^3 + y^3 + z^3
% ===================================================
% example that uses addBC3D
% example that uses addScalarBC3D
%
close all; clc;

Expand Down Expand Up @@ -43,13 +43,12 @@
bcz = reshape(bcz,[],1);
v = {bcl;bcr;bcb;bct;bcf;bcz};
% construct linear system
A = - lap3D(k,m,dx,n,dy,o,dz);
A = - lap3D(k,m,dx,n,dy,o,dz,dc,nc);
b = - 6*(X+Y+Z);
b = reshape(b,[],1);
[A0,b0] = addBC3D(A,b,k,m,dx,n,dy,o,dz,dc,nc,v);
[A0,b0] = addScalarBC3D(A,b,k,m,dx,n,dy,o,dz,dc,nc,v);
ua = A0\b0; % approximate solution
ua = reshape(ua,m+2,n+2,o+2);
ua = ua - ua((m+1)/2,(n+3)/2,(o+3)/2);

% plot slices as surfaces
figure(bvp)
Expand Down
Loading