Partial Differential Equation Toolbox™ позволяет вам находить элементы mesh и узлы их геометрическим местоположением или близостью к конкретной точке или узел. Этот пример работает с группой элементов и узлов, расположенных в заданном диске ограничения.
Создайте установившуюся тепловую модель.
thermalmodel = createpde('thermal','steadystate');
Импортируйте и постройте геометрию.
importGeometry(thermalmodel,'PlateHolePlanar.stl'); pdegplot(thermalmodel,'FaceLabels','on', ... 'EdgeLabels','on')
Присвойте теплопроводность материала.
thermalProperties(thermalmodel,'ThermalConductivity',1);
Примените постоянную температуру к левому краю и постоянной температуре к правому краю. Все другие ребра изолируются по умолчанию.
thermalBC(thermalmodel,'Edge',4,'Temperature',20); thermalBC(thermalmodel,'Edge',1,'Temperature',-10);
Сгенерируйте mesh и решите задачу. В данном примере используйте линейную mesh, чтобы лучше видеть узлы на сетчатых графиках. Дополнительные узлы на квадратичной mesh мешают видеть графики в этом примере ясно.
mesh = generateMesh(thermalmodel, ... 'GeometricOrder','linear'); thermalresults = solve(thermalmodel);
Решатель находит температуры и градиенты температуры во всех узловых местоположениях. Постройте температуры.
pdeplot(thermalmodel,'XYData',thermalresults.Temperature) axis equal
Предположим, что необходимо анализировать результаты вокруг центрального отверстия более тесно. Во-первых, найдите узлы и элементы расположенными рядом с отверстием при помощи 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')
Найдите минимальные и максимальные температуры в заданном радиусе.
[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 pdemesh(thermalmodel) hold on pdemesh(mesh.Nodes,mesh.Elements(:,Er), ... 'EdgeColor','green')
Покажите решение только для этих элементов.
figure pdeplot(mesh.Nodes,mesh.Elements(:,Er), ... 'XYData',thermalresults.Temperature)