Сгенерируйте Mesh

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)

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

Сгенерируйте 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)

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

Для сравнения создайте 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)

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

Теперь создайте 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)

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

Создайте 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)

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

Создайте 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)

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

Также можно выбрать геометрический порядок 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')  

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

Чтобы сохранить память или решить 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')  

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