Оцените качество элементов Mesh

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

Как правило, решатели УЧП работают лучше всего с сетками, составленными из элементов, которые имеют равностороннюю форму. Такие сетки идеальны. В действительности создание идеальной mesh для большинства 2D и 3-D конфигураций невозможно, потому что конфигурации имеют крошечные или узкие области и резкие углы. Для таких областей генератор mesh создает сетки с некоторыми элементами, которые намного меньше, чем остальная часть элементов mesh или имеют решительно различные длины стороны.

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

Проверка, имеет ли mesh хорошее качество прежде, чем запустить анализ, является хорошей практикой, особенно для симуляций, которые занимают много времени. Тулбокс обеспечивает meshQuality функция для этой задачи.

meshQuality оценивает качество формы элементов mesh и возвращает числа от 0 до 1 для каждого элемента mesh. Значение 1 соответствует оптимальной форме элемента. По умолчанию, meshQuality функционируйте комбинирует несколько критериев при оценке качества формы. В дополнение к метрике по умолчанию можно использовать aspect-ratio метрика, которая базируется только на отношении минимальной размерности элемента к его максимальной размерности.

Создайте модель PDE.

model = createpde;

Включайте и постройте геометрию торуса.

importGeometry(model,'Torus.stl');
pdegplot(model)
camlight right

Figure contains an axes object. The axes object contains 2 objects of type quiver, patch.

Сгенерируйте крупную сетку.

mesh = generateMesh(model,'Hmax',10);

Оцените качество формы всех элементов mesh.

Q = meshQuality(mesh);

Найдите элементы с качественными значениями меньше чем 0,3.

elemIDs = find(Q < 0.3);

Подсветите эти элементы синего цвета на сетчатом графике.

figure
pdemesh(mesh,'FaceAlpha',0.5)
hold on
pdemesh(mesh.Nodes,mesh.Elements(:,elemIDs), ...
        'FaceColor','blue','EdgeColor','blue')

Определите, сколько из общего объема mesh принадлежит элементам с качественными значениями меньше чем 0,3. Возвратите результат как процент.

mv03_percent = volume(mesh,elemIDs)/volume(mesh)*100
mv03_percent = 0.0198

Оцените качество формы элементов mesh при помощи отношения минимальных к максимальной размерности для каждого элемента.

Q = meshQuality(mesh,'aspect-ratio');

Найдите элементы с качественными значениями меньше чем 0,3.

elemIDs = find(Q < 0.3);

Подсветите эти элементы синего цвета на сетчатом графике.

figure
pdemesh(mesh,'FaceAlpha',0.5)
hold on
pdemesh(mesh.Nodes,mesh.Elements(:,elemIDs), ...
        'FaceColor','blue','EdgeColor','blue')