This example shows how to apply various constant boundary condition specifications for both scalar PDEs and systems of PDEs.
All the specifications use the same 2-D geometry, which is a rectangle with a circular hole.
% Rectangle is code 3, 4 sides, followed by x-coordinates and then y-coordinates R1 = [3,4,-1,1,1,-1,-.4,-.4,.4,.4]'; % Circle is code 1, center (.5,0), radius .2 C1 = [1,.5,0,.2]'; % Pad C1 with zeros to enable concatenation with R1 C1 = [C1;zeros(length(R1)-length(C1),1)]; geom = [R1,C1]; % Names for the two geometric objects ns = (char('R1','C1'))'; % Set formula sf = 'R1 - C1'; % Create geometry g = decsg(geom,sf,ns); % Create geometry model model = createpde; % Include the geometry in the model and view the geometry geometryFromEdges(model,g); pdegplot(model,'EdgeLabels','on') xlim([-1.1 1.1]) axis equal
Suppose that edge 3 has Dirichlet conditions with value 32, edge 1 has Dirichlet conditions with value 72, and all other edges have Neumann boundary conditions with q = 0
, g = -1
.
applyBoundaryCondition(model,'dirichlet','edge',3,'u',32); applyBoundaryCondition(model,'dirichlet','edge',1,'u',72); applyBoundaryCondition(model,'neumann','edge',[2,4:8],'g',-1);
This completes the boundary condition specification.
Solve an elliptic PDE with these boundary conditions with c = 1
, a = 0
, and f = 10
. Because the shorter rectangular side has length 0.8, to ensure that the mesh is not too coarse choose a maximum mesh size Hmax = 0.1
.
specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f',10); generateMesh(model,'Hmax',0.1); results = solvepde(model); u = results.NodalSolution; pdeplot(model,'XYData',u,'ZData',u) view(-23,8)
Suppose that the system has N = 2
.
Edge 3 has Dirichlet conditions with values [32,72].
Edge 1 has Dirichlet conditions with values [72,32].
Edge 4 has a Dirichlet condition for the first component with value 52, and has a Neumann condition for the second component with q = 0
, g = -1
.
Edge 2 has Neumann boundary conditions with q = [1,2;3,4]
and g = [5,-6]
.
The circular edges (edges 5 through 8) have q = 0
and g = 0
.
model = createpde(2); geometryFromEdges(model,g); applyBoundaryCondition(model,'dirichlet','edge',3,'u',[32,72]); applyBoundaryCondition(model,'dirichlet','edge',1,'u',[72,32]); applyBoundaryCondition(model,'mixed','edge',4,'u',52,'EquationIndex',1,'g',[0,-1]); Q2 = [1,2;3,4]; G2 = [5,-6]; applyBoundaryCondition(model,'neumann','edge',2,'q',Q2,'g',G2); % The next step is optional, because it sets 'g' to its default value applyBoundaryCondition(model,'neumann','edge',5:8,'g',[0,0]);
This completes the boundary condition specification.
Solve an elliptic PDE with these boundary conditions using c = 1
, a = 0
, and f = [10;-10]
. Because the shorter rectangular side has length 0.8, to ensure that the mesh is not too coarse choose a maximum mesh size Hmax = 0.1
.
specifyCoefficients(model,'m',0,'d',0,'c',1,'a',0,'f', [10;-10]); generateMesh(model,'Hmax',0.1); results = solvepde(model); u = results.NodalSolution; pdeplot(model,'XYData',u(:,2),'ZData',u(:,2))