# Sphere in Cube

This example shows how to create a nested multidomain geometry consisting of a unit sphere and a cube. The first part of the example creates a cube with a spherical cavity by using `alphaShape`. The second part creates a solid sphere using tetrahedral elements, and then combines all tetrahedral elements to obtain a solid sphere embedded in a cube.

### Cube with Spherical Cavity

First, create a geometry consisting of a cube with a spherical cavity. This geometry has one cell.

Create a 3-D rectangular mesh grid.

```[xg, yg, zg] = meshgrid(-2:0.25:2); Pcube = [xg(:) yg(:), zg(:)];```

Extract the grid points located outside of the unit spherical region.

`Pcavitycube = Pcube(vecnorm(Pcube') > 1,:);`

Create points on the unit sphere.

```[x1,y1,z1] = sphere(24); Psphere = [x1(:) y1(:) z1(:)]; Psphere = unique(Psphere,'rows');```

Combine the coordinates of the rectangular grid (without the points inside the sphere) and the surface coordinates of the unit sphere.

`Pcombined = [Pcavitycube;Psphere];`

Create an `alphaShape` object representing the cube with the spherical cavity.

```shpCubeWithSphericalCavity = alphaShape(Pcombined(:,1), ... Pcombined(:,2), ... Pcombined(:,3)); figure plot(shpCubeWithSphericalCavity,'FaceAlpha',0.4) title('alphaShape: Cube with Spherical Cavity')```

Recover the triangulation that defines the domain of the `alphaShape` object.

`[tri,loc] = alphaTriangulation(shpCubeWithSphericalCavity);`

Create a PDE model.

`modelCube = createpde;`

Create a geometry from the mesh and import the geometry and the mesh into the model.

`[gCube,mshCube] = geometryFromMesh(modelCube,loc',tri');`

Plot the resulting geometry.

```figure pdegplot(modelCube,'FaceAlpha',0.5,'CellLabels','on') title('PDEModel: Cube with Spherical Cavity')```

### Solid Sphere Nested in Cube

Create tetrahedral elements to form a solid sphere by using the spherical shell and adding a new node at the center. First, obtain the spherical shell by extracting facets of the spherical boundary.

```sphereFacets = boundaryFacets(mshCube,'Face',3); sphereNodes = findNodes(mshCube,'region','Face',3);```

Add a new node at the center.

`newNodeID = size(mshCube.Nodes,2) + 1;`

Construct the tetrahedral elements by using each of the three nodes on the spherical boundary facets and the new node at the origin.

`sphereTets = [sphereFacets; newNodeID*ones(1,size(sphereFacets,2))];`

Create a model that combines the cube with the spherical cavity and a sphere.

`model = createpde;`

Create a vector that maps all `mshCube` elements to cell 1, and all elements of the solid sphere to cell 2.

`e2c = [ones(1,size(mshCube.Elements,2)), 2*ones(1,size(sphereTets,2))];`

Add a new node at the center `[0;0;0]` to the nodes of the cube with the cavity.

`combinedNodes = [mshCube.Nodes,[0;0;0]];`

Combine the element connectivity matrices.

`combinedElements = [mshCube.Elements,sphereTets];`

Create a two-cell geometry from the mesh.

```[g,msh] = geometryFromMesh(model,combinedNodes,combinedElements,e2c); figure pdegplot(model,'FaceAlpha',0.5,'CellLabels','on') title('Solid Sphere in Cube')```

Get trial now