В этом примере показано, как разделить геометрию блока в одной области на две области. В первой части примера создается сетка и элементы сетки делятся на две группы. Во второй части примера создается двухдоменная геометрия на основе этого деления.
Создайте модель PDE.
modelSingleDomain = createpde;
Импортируйте геометрию.
importGeometry(modelSingleDomain,'Block.stl');Создание и печать сетки.
msh = generateMesh(modelSingleDomain); figure pdemesh(modelSingleDomain)

Получение узлов и элементов сетки.
nodes = msh.Nodes; elements = msh.Elements;
Найдите координаты X геометрических центров всех элементов сетки. Сначала создайте массив того же размера, что и elements содержит координаты X узлов, образующих элементы сетки. Каждый столбец этого вектора содержит x-координаты 10 узлов, которые образуют элемент.
elemXCoords = reshape(nodes(1,elements),10,[]);
Вычислите среднее для каждого столбца этого массива, чтобы получить вектор координат x геометрических центров элемента.
elemXCoordsGeometricCenter = mean(elemXCoords);
Предположим, что все элементы имеют одинаковый идентификатор области, и создайте матрицу ElementIdToRegionId.
ElementIdToRegionId = ones(1,size(elements,2));
Найдите идентификаторы всех элементов, для которых координата x геометрического центра превышает 30.
idx = mean(elemXCoords) > 30;
Для элементов с центрами, расположенными за пределами x = 30, измените идентификаторы областей на 2.
ElementIdToRegionId(idx) = 2;
Создайте новую модель PDE.
modelTwoDomain = createpde;
Используя geometryFromMeshимпортируйте сетку. Назначьте элементы двум ячейкам на основе их идентификаторов.
geometryFromMesh(modelTwoDomain,nodes,elements,ElementIdToRegionId)
ans =
DiscreteGeometry with properties:
NumCells: 2
NumFaces: 108
NumEdges: 205
NumVertices: 100
Vertices: [100x3 double]
Постройте график геометрии, отображая метки ячеек.
pdegplot(modelTwoDomain,'CellLabels','on','FaceAlpha',0.5)

Выделите элементы из ячейки 1 красным цветом, а элементы из ячейки 2 зеленым.
elementIDsCell1 = findElements(modelTwoDomain.Mesh,'region','Cell',1); elementIDsCell2 = findElements(modelTwoDomain.Mesh,'region','Cell',2); figure pdemesh(modelTwoDomain.Mesh.Nodes, ... modelTwoDomain.Mesh.Elements(:,elementIDsCell1), ... 'FaceColor','red') hold on pdemesh(modelTwoDomain.Mesh.Nodes, ... modelTwoDomain.Mesh.Elements(:,elementIDsCell2), ... 'FaceColor','green')
