Найдите элементы Mesh и узлы местоположением

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

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

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

Импортируйте и постройте геометрию.

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

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

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

thermalProperties(thermalmodel,'ThermalConductivity',1);

Примените постоянную температуру 20C к левому краю и постоянной температуре -10Cк правому краю. Все другие ребра изолируются по умолчанию.

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

Figure contains an axes object. The axes object 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 object. The axes object 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 object. The axes object contains 4 objects of type line.

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

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

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

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

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

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