В этом примере показано, как создать вложенную многодоменную геометрию, состоящую из сферы единичного радиуса и куба. Первая часть примера создает куб со сферической полостью при помощи alphaShape
. Вторая часть создает твердую сферу с помощью четырехгранных элементов, и затем комбинирует все четырехгранные элементы, чтобы получить твердую сферу, встроенную в куб.
Во-первых, создайте геометрию, состоящую из куба со сферической полостью. Эта геометрия имеет одну ячейку.
Создайте 3-D прямоугольную сетку mesh.
[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;
Создайте геометрию из mesh и импортируйте геометрию и mesh в модель.
[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];
Создайте геометрию 2D ячейки из mesh.
[g,msh] = geometryFromMesh(model,combinedNodes,combinedElements,e2c); figure pdegplot(model,'FaceAlpha',0.5,'CellLabels','on') title('Solid Sphere in Cube')