exponenta event banner

Уравнение Пуассона с уточнением источника точек и адаптивной сетки

В этом примере показано, как решить уравнение Пуассона с точечным источником дельта-функции на единичном диске с помощью adaptmesh функция.

В частности, решить уравнение Пуассона

-Δu = δ (x, y)

на единичном диске с нулевыми граничными условиями Дирихле. Точное решение, выраженное в полярных координатах

u (r, start) = log (r) 2δ,

который является единственным в начале.

Используя адаптивное уточнение сетки, частичное уравнение Toolbox™ может точно найти решение в любом месте от начала координат.

Проблему определяют следующие переменные:

  • c, aКоэффициенты PDE.

  • fФункция, фиксирующая источник точек в начале координат. Возвращает 1/область для треугольника, содержащего начало координат, и 0 для других треугольников.

c = 1;
a = 0;
f = @circlef;

Создайте модель PDE с одной зависимой переменной.

numberOfPDE = 1;
model = createpde(numberOfPDE);

Создайте геометрию и включите ее в модель.

g = @circleg;
geometryFromEdges(model,g);

Постройте график геометрии и отобразите метки кромок.

figure; 
pdegplot(model,'EdgeLabels','on'); 
axis equal
title 'Geometry With Edge Labels Displayed';

Figure contains an axes. The axes with title Geometry With Edge Labels Displayed contains 5 objects of type line, text.

Задайте нулевое решение для всех четырех внешних кромок окружности.

applyBoundaryCondition(model,'dirichlet','Edge',(1:4),'u',0);

adaptmesh решает эллиптические PDE с помощью адаптивной генерации сетки. tripick параметр позволяет указать функцию, возвращающую треугольники, которые будут уточнены в следующей итерации. circlepick возвращает треугольники с вычисленными оценками ошибок, превышающими заданный допуск. Допуск предоставляется circlepick с использованием параметра «par».

[u,p,e,t] = adaptmesh(g,model,c,a,f,'tripick','circlepick','maxt',2000,'par',1e-3);
Number of triangles: 258
Number of triangles: 515
Number of triangles: 747
Number of triangles: 1003
Number of triangles: 1243
Number of triangles: 1481
Number of triangles: 1705
Number of triangles: 1943
Number of triangles: 2155

Maximum number of triangles obtained.

Постройте график лучшей сетки.

figure; 
pdemesh(p,e,t); 
axis equal

Figure contains an axes. The axes contains 2 objects of type line.

Постройте график значений ошибок.

x = p(1,:)';
y = p(2,:)';
r = sqrt(x.^2+y.^2);
uu = -log(r)/2/pi;
figure;
pdeplot(p,e,t,'XYData',u-uu,'ZData',u-uu,'Mesh','off');

Figure contains an axes. The axes contains an object of type patch.

Постройте график решения КЭМ на самой тонкой сетке.

figure;
pdeplot(p,e,t,'XYData',u,'ZData',u,'Mesh','off');

Figure contains an axes. The axes contains an object of type patch.