В этом примере показано, как создать вложенную многооменную геометрию, состоящую из единичной сферы и куба. Первая часть примера создает куб со сферической полостью с помощью alphaShape. Вторая часть создает сплошную сферу, используя тетраэдрические элементы, а затем объединяет все тетраэдрические элементы, чтобы получить сплошную сферу, внедренную в куб.
Сначала создайте геометрию, состоящую из куба со сферической полостью. Эта геометрия имеет одну ячейку.
Создайте 3-D прямоугольную сетку.
[xg, yg, zg] = meshgrid(-2:0.25:2); Pcube = [xg(:) yg(:), zg(:)];
Извлеките точки сетки, расположенные вне сферической области блока.
Pcavitycube = Pcube(vecnorm(Pcube') > 1,:);
Создайте точки на единичной сфере.
[x1,y1,z1] = sphere(24);
Psphere = [x1(:) y1(:) z1(:)];
Psphere = unique(Psphere,'rows');Объедините координаты прямоугольной сетки (без точек внутри сферы) и координаты поверхности единичной сферы.
Pcombined = [Pcavitycube;Psphere];
Создание alphaShape объект, представляющий собой куб со сферической полостью.
shpCubeWithSphericalCavity = alphaShape(Pcombined(:,1), ... Pcombined(:,2), ... Pcombined(:,3)); figure plot(shpCubeWithSphericalCavity,'FaceAlpha',0.4) title('alphaShape: Cube with Spherical Cavity')

Восстановление триангуляции, определяющей домен alphaShape объект.
[tri,loc] = alphaTriangulation(shpCubeWithSphericalCavity);
Создайте модель PDE.
modelCube = createpde;
Создайте геометрию из сетки и импортируйте геометрию и сетку в модель.
[gCube,mshCube] = geometryFromMesh(modelCube,loc',tri');
Постройте график результирующей геометрии.
figure pdegplot(modelCube,'FaceAlpha',0.5,'CellLabels','on') title('PDEModel: Cube with Spherical Cavity')

Создайте четырехгранные элементы для формирования сплошной сферы с помощью сферической оболочки и добавления нового узла в центре. Во-первых, получить сферическую оболочку путем извлечения граней сферической границы.
sphereFacets = boundaryFacets(mshCube,'Face',3); sphereNodes = findNodes(mshCube,'region','Face',3);
Добавьте новый узел в центре.
newNodeID = size(mshCube.Nodes,2) + 1;
Создайте тетраэдрические элементы, используя каждый из трех узлов на сферических граничных фасетах и новый узел в начале координат.
sphereTets = [sphereFacets; newNodeID*ones(1,size(sphereFacets,2))];
Создайте модель, объединяющую куб со сферической полостью и сферой.
model = createpde;
Создание вектора, отображающего все mshCube элементы к ячейке 1 и все элементы сплошной сферы к ячейке 2.
e2c = [ones(1,size(mshCube.Elements,2)), 2*ones(1,size(sphereTets,2))];
Добавление нового узла в центре [0;0;0] к узлам куба с полостью.
combinedNodes = [mshCube.Nodes,[0;0;0]];
Объединение матриц связности элементов.
combinedElements = [mshCube.Elements,sphereTets];
Создайте из сетки геометрию с двумя ячейками.
[g,msh] = geometryFromMesh(model,combinedNodes,combinedElements,e2c); figure pdegplot(model,'FaceAlpha',0.5,'CellLabels','on') title('Solid Sphere in Cube')
