exponenta event banner

Поиск элементов и узлов сетки по расположению

Дифференциальное уравнение в частных производных Toolbox™ позволяет находить элементы и узлы сетки по их геометрическому расположению или близости к определенной точке или узлу. Этот пример работает с группой элементов и узлов, расположенных в пределах указанного ограничивающего диска.

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

thermalmodel = createpde('thermal','steadystate');

Импорт и печать геометрии.

importGeometry(thermalmodel,'PlateHolePlanar.stl');
pdegplot(thermalmodel,'FaceLabels','on','EdgeLabels','on')

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

Назначьте теплопроводность материала.

thermalProperties(thermalmodel,'ThermalConductivity',1);

Применить постоянную температуру 20∘C к левому краю и постоянную температуру - 10∘Cto правому краю. Все остальные кромки по умолчанию изолированы.

thermalBC(thermalmodel,'Edge',4,'Temperature',20);
thermalBC(thermalmodel,'Edge',1,'Temperature',-10);

Создайте сетку и решите проблему. В этом примере используйте линейную сетку, чтобы лучше видеть узлы на графиках сетки. Дополнительные узлы квадратичной сетки затрудняют четкое отображение графиков в этом примере.

mesh = generateMesh(thermalmodel,'GeometricOrder','linear');
thermalresults = solve(thermalmodel);

Решатель находит температуры и градиенты температуры во всех узловых местах. Постройте график температур.

pdeplot(thermalmodel,'XYData',thermalresults.Temperature)
axis equal

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

Предположим, что необходимо более тщательно проанализировать результаты вокруг центрального отверстия. Сначала найдите узлы и элементы, расположенные рядом с отверстием, используя findNodes и findElements функции. Например, найдите узлы и элементы, расположенные в радиусе 2,5 от центра [5 10].

Nr = findNodes(mesh,'radius',[5 10],2.5);
Er = findElements(mesh,'radius',[5 10],2.5);

Выделите узлы в пределах этого радиуса на сетевом графике с помощью зеленого маркера.

figure
pdemesh(thermalmodel)
hold on
plot(mesh.Nodes(1,Nr),mesh.Nodes(2,Nr),'or','MarkerFaceColor','g')

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

Найдите минимальные и максимальные температуры в пределах заданного радиуса.

[Temps_disk] = thermalresults.Temperature(Nr);
[T_min,index_min] = min(Temps_disk);
[T_max,index_max] = max(Temps_disk);
T_min
T_min = -2.1698
T_max
T_max = 12.2420

Найдите идентификаторы узлов, соответствующие минимальным и максимальным температурам. Постройте эти узлы на графике сетки.

nodeIDmin = Nr(index_min);
nodeIDmax = Nr(index_max);

figure
pdemesh(thermalmodel)
hold on
plot(mesh.Nodes(1,nodeIDmin),mesh.Nodes(2,nodeIDmin),'or','MarkerFaceColor','b')
plot(mesh.Nodes(1,nodeIDmax),mesh.Nodes(2,nodeIDmax),'or','MarkerFaceColor','r')

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

Теперь выделите элементы в пределах заданного радиуса на сетке с помощью зеленого маркера.

figure
pdemesh(thermalmodel)
hold on
pdemesh(mesh.Nodes,mesh.Elements(:,Er),'EdgeColor','green')

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

Показать решение только для этих элементов.

figure
pdeplot(mesh.Nodes,mesh.Elements(:,Er),'XYData',thermalresults.Temperature)

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