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

The generateMesh функция создает треугольный mesh для 2-D геометрии и четырехгранный mesh для 3-D геометрии. По умолчанию генератор сетки использует внутренние алгоритмы, чтобы выбрать подходящие параметры калибровки для конкретной геометрии. Можно также использовать дополнительные аргументы, чтобы явным образом задать следующие параметры:

  • Целевая максимальная длина ребра mesh, которая является приблизительной верхней границей на длинах ребер сетки. Обратите внимание, что иногда некоторые элементы могут иметь ребра длиннее, чем этот параметр.

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

  • Скорость роста сетки, с которой размер сетки увеличивается от небольших частей геометрии. Значение должно быть от 1 до 2. Это отношение соответствует длине ребра двух последовательных элементов. Значение по умолчанию является 1,5, то есть размер сетки увеличивается на 50%.

  • Квадратичный или линейный геометрический порядок. Квадратичный элемент имеет узлы по углам и центрам ребер, линейный элемент имеет узлы только по углам.

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

model = createpde;

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

importGeometry(model,'PlateSquareHolePlanar.stl');
pdegplot(model)

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

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

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. The axes contains 3 objects of type line.