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

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

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

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

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

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

Создайте модель УЧП.

model = createpde;

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

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

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

Сгенерируйте крупный mesh.

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

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

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')

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

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

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

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')