Skip to content
Merged
Show file tree
Hide file tree
Changes from 7 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