В этом примере показано, как применить различные постоянные спецификации граничного условия и для скалярных УЧП и для систем УЧП.
Все спецификации используют ту же 2D геометрию, которая является прямоугольником с круговым отверстием.
% 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
Предположим, что ребро 3 имеет условия Дирихле со значением 32, ребро 1 имеет условия Дирихле со значением 72, и все другие ребра имеют Неймановы граничные условия с 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);
Это завершает спецификацию граничного условия.
Решите эллиптический УЧП с этими граничными условиями с c = 1
, a = 0
, и f = 10
. Поскольку более короткая прямоугольная сторона имеет длину 0.8, чтобы гарантировать, что mesh не слишком крупна, выбирают максимальный размер mesh 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)
Предположим, что система имеет N = 2
.
Ребро 3 имеет условия Дирихле со значениями [32,72].
Ребро 1 имеет условия Дирихле со значениями [72,32].
Ребро 4 имеет условие Дирихле для первого компонента со значением 52 и имеет Нейманово условие для второго компонента с q = 0
, g = -1
.
Ребро 2 имеет Неймановы граничные условия с q = [1,2;3,4]
и g = [5,-6]
.
Круговые ребра (ребра 5 - 8) имеют q = 0
и 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]);
Это завершает спецификацию граничного условия.
Решите эллиптический УЧП с этими граничными условиями с помощью c = 1
, a = 0
, и f = [10;-10]
. Поскольку более короткая прямоугольная сторона имеет длину 0.8, чтобы гарантировать, что mesh не слишком крупна, выбирают максимальный размер mesh 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))