generateMesh
функция создает треугольную mesh для 2D геометрии и четырехгранную mesh для 3-D геометрии. По умолчанию генератор mesh использует внутренние алгоритмы, чтобы выбрать подходящие параметры калибровки для конкретной геометрии. Также можно использовать дополнительные аргументы, чтобы задать следующие параметры явным образом:
Предназначайтесь для максимальной длины ребра mesh, которая является аппроксимированной верхней границей на длинах ребра mesh. Обратите внимание на то, что иногда некоторые элементы могут иметь ребра дольше, чем этот параметр.
Предназначайтесь для минимальной длины ребра mesh, которая является аппроксимированной нижней границей на длинах ребра mesh. Обратите внимание на то, что иногда некоторые элементы могут иметь ребра короче, чем этот параметр.
Поймайте в сети темп роста, который является уровнем, на котором размер mesh увеличивается далеко от мелких деталей геометрии. Значение должно быть между 1 и 2. Это отношение соответствует длине ребра двух последовательных элементов. Значение по умолчанию 1.5, то есть, увеличения размера mesh на 50%.
Квадратичный или линейный геометрический порядок. Квадратичный элемент имеет узлы в своих углах и центрах ребра, в то время как линейный элемент имеет узлы только в его углах.
Создайте модель PDE.
model = createpde;
Включайте и постройте следующую геометрию.
importGeometry(model,'PlateSquareHolePlanar.stl');
pdegplot(model)
Сгенерируйте mesh по умолчанию. Для этой геометрии целевые максимальные и минимальные длины ребра mesh по умолчанию 8.9443 и 4.4721, соответственно.
mesh_default = generateMesh(model)
mesh_default = FEMesh with properties: Nodes: [2x1218 double] Elements: [6x574 double] MaxElementSize: 8.9443 MinElementSize: 4.4721 MeshGradation: 1.5000 GeometricOrder: 'quadratic'
Просмотрите mesh.
figure pdemesh(mesh_default)
Для сравнения создайте mesh с целевой максимальной длиной ребра элемента 20.
mesh_Hmax = generateMesh(model,'Hmax',20)
mesh_Hmax = FEMesh with properties: Nodes: [2x286 double] Elements: [6x126 double] MaxElementSize: 20 MinElementSize: 10 MeshGradation: 1.5000 GeometricOrder: 'quadratic'
figure pdemesh(mesh_Hmax)
Теперь создайте mesh с целевой минимальной длиной ребра элемента 0,5.
mesh_Hmin = generateMesh(model,'Hmin',0.5)
mesh_Hmin = FEMesh with properties: Nodes: [2x1378 double] Elements: [6x654 double] MaxElementSize: 8.9443 MinElementSize: 0.5000 MeshGradation: 1.5000 GeometricOrder: 'quadratic'
figure pdemesh(mesh_Hmin)
Создайте mesh, задав и максимальные и минимальные длины ребра элемента вместо того, чтобы использовать значения по умолчанию.
mesh_HminHmax = generateMesh(model,'Hmax',20,'Hmin',0.5)
mesh_HminHmax = FEMesh with properties: Nodes: [2x458 double] Elements: [6x212 double] MaxElementSize: 20 MinElementSize: 0.5000 MeshGradation: 1.5000 GeometricOrder: 'quadratic'
Просмотрите mesh.
figure pdemesh(mesh_HminHmax)
Создайте mesh с теми же максимальными и минимальными длинами ребра элемента, но с темпом роста 1,9 вместо значения по умолчанию 1,5.
mesh_Hgrad = generateMesh(model,'Hmax',20,'Hmin',0.5,'Hgrad',1.9)
mesh_Hgrad = FEMesh with properties: Nodes: [2x390 double] Elements: [6x178 double] MaxElementSize: 20 MinElementSize: 0.5000 MeshGradation: 1.9000 GeometricOrder: 'quadratic'
figure pdemesh(mesh_Hgrad)
Также можно выбрать геометрический порядок mesh. Тулбокс может сгенерировать сетки, составленные из квадратичных или линейных элементов. По умолчанию это использует квадратичные сетки, которые имеют узлы и в центрах ребра и в угловых узлах.
mesh_quadratic = generateMesh(model,'Hmax',50); figure pdemesh(mesh_quadratic,'NodeLabels','on') hold on plot(mesh_quadratic.Nodes(1,:),mesh_quadratic.Nodes(2,:),'ok','MarkerFaceColor','g')
Чтобы сохранить память или решить 2D задачу с помощью устаревшего решателя, замените квадратичный геометрический порядок по умолчанию. Устаревшие решатели УЧП требуют линейных треугольных сеток для 2D конфигураций.
mesh_linear = generateMesh(model,'Hmax',50,'GeometricOrder','linear'); figure pdemesh(mesh_linear,'NodeLabels','on') hold on plot(mesh_linear.Nodes(1,:),mesh_linear.Nodes(2,:),'ok','MarkerFaceColor','g')