# Displaying NDEigensystem Results

I want to display a collection of deformed meshes in a GraphicsGrid where the surface colors are proportional to the displacement.

mesh = ToElementMesh[Cuboid[{-0.1, -1, -0.1}, {0.1, 1, 0.1}],
"MeshOrder" -> 1];

tvars = {{u[t, x, y, z], v[t, x, y, z], w[t, x, y, z]},
t, {x, y, z}};
pars = <|"Material" -> Entity["Element", "Titanium"]|>;

constraint = SolidFixedCondition[y^2 <= 0.001, tvars, pars];

eigenmodeOperator =
SolidMechanicsPDEComponent[tvars,
Join[pars, <|"AnalysisType" -> "Eigenmode"|>]];

{evals, evecs} =
NDEigensystem[{eigenmodeOperator == {0, 0, 0}, constraint},
tvars[[1]], t, {x, y, z} \[Element] mesh, 6];

eigenfrequencies = Re[Sqrt[evals]/(2 Pi)]


Here is a picture showing how the coloring should work.

• Understood, I thought FaceForm could take a map maybe using Texture. What about using ElementMeshToGraphicsComplex? May 27 at 0:58
• There are examples of this in the solid mechanics monograph May 28 at 5:20
• @user21 Can the NDEigensystem be computed in parallel? May 28 at 19:14

Use VectorDisplacementPlot3D, however, the domain needs to reference the original geometric solid or boundary mesh region (the method I recommend BoundaryMeshRegion[bar]), not the element mesh.

bar=Cuboid[{-0.1, -1, -0.1}, {0.1, 1, 0.1}];
mesh = ToElementMesh[bar, "MeshOrder" -> 1, MeshQualityGoal -> 1]

... PDE ...

plots = Table[
VectorDisplacementPlot3D[evecs[[i]], {x, y, z} \[Element] bar,
AxesLabel -> {x, y, z}, Ticks -> None, Axes -> True, Boxed -> False,
PlotLabel ->  Style["Freq.=" <> ToString[eigenfrequencies[[i]]] <> " Hz", 12]],
{i, Length[eigenfrequencies]}];
Grid[Partition[plots, 3]]