Snapping

Perhaps the most jarring examples of structural stability loss is the snap-through instability. The most familiar example of snapping is the popper toy – a spherical cap made of rubber that rapidly jumps when it’s turned inside out.

Structures that exhibit this snap-through behavior are termed bistable, as they have two configurations that are in statical equilibrium, rather than one1.

Although snapping may be familiar, the physical mechanism behind it is rather tricky, which leads us to a rather fundamental question:

Why does a structure suddenly “snap” to a new shape?

The simplest possible system that exhibits snapping is a bistable arch. We’ll consider an arch that has been discretized into two linear springs of stiffness $Latex formula$, that are pinned2 together and pinned at supports separated by a distance $Latex formula$. Initially, the springs form an arch with an angle $Latex formula$, and upon loading the apex of the arch with a force $Latex formula$ the arch will deform with a new angle3 $Latex formula$.

We know that for a structure to be in static equilibrium its total potential energy must be stationary,

$Latex formula$.

The total potential energy of our simple arch will be the sum of the strain energy in the springs and the potential energy of the load,

$Latex formula$.

Derive the total potential energy (Expand)

The strain energy of a compressed spring is $Latex formula$, where $Latex formula$ is the amount of compression.

Therefore, we can write the strain energy in the two springs as,

$Latex formula$.

If the arch is initially shallow, remains shallow, and symmetric, we can write this strain energy as

Approximation of the strain energy (Expand)

First, our small angle approximations allow us to Taylor expand the cosine of the angles

$Latex formula$.

Putting these expansions back into the strain energy, and factoring out $Latex formula$ leads to

$Latex formula$.

We next find a common denominator between the two fractions by multiplying each by one, in the form of $Latex formula$ for the first term, and $Latex formula$ for the second, arriving at

$Latex formula$.

Now, we pull out the one half squared, and expand the denominator, so that the energy becomes

$Latex formula$.

Finally, we see that all the terms in the denominator will be small compared with one due to our small angle approximation, so upon neglecting them we arrive at the approximate strain energy.

$Latex formula$.

Now, we need the potential energy of the load, or the work done by a force displacing the arch some distance. The displacement is the difference in heights of the triangles above,

$Latex formula$,

which can be simplified by the small angle approximation to

$Latex formula$.

Our total potential energy can be written as

$Latex formula$

So, we can find all the equilibrium configurations of the arch by differentiating the total strain energy with respect to the deformed angle, and setting that equal to zero. By solving for the load,

$Latex formula$,

we can plot a force vs. displacement diagram4 (Below, middle):

We can learn a few things from this force vs. displacement curve. First, three points equilibrium points when the force is zero, suggesting the arch may be multistable. Second, the curve has peaks – maxima and minima. The second main axiom of elastic stability says that for an equilibrium state to be stable it must be a relative minimum of the total potential energy. These peaks mean those equilibrium states may not be at a minimum, and suggest that we should check if these points are stable.

We check for stability by requiring the total potential energy to be a minimum – this means checking the second variation of the energy.

$Latex formula$.

Therefore, the second variation is

$Latex formula$,

and this parabola is plotted next to the force displacement curve above. Positive values of the second variation are stable, while negative values are unstable5.

The picture of snapping should now start to come into focus. First we see that an arch is bistable6. Second, when the arch is pushed on hard enough it reaches a point of unstable equilibrium, a limit point. It has no choice but to find an equilibrium shape that can sustain that applied load.

In the case of snapping, the closest stable equilibrium state is far away, and it requires the arch to jump suddenly to a new shape.

Putting this all together, we can see the behavior of a snapping arch below, along with its corresponding force vs. displacement curve.

The force increases until it reaches a critical point, and then the arch needs to find a shape on the equilibrium curve that can sustain that same load, and so it snaps. The area under the curve during the snapping process gives the energy released during snapping, which is typically dissipated through damping by large amplitude vibrations about the new equilibrium state. In the example of a snapping popper, these vibrations are the audible ‘pop’ you hear as it snaps.

It is worth emphasizing that snapping is a limit point instability, which is a fundamentally different type of instability than buckling. Buckling is classified as a stable, symmetric bifurcation. The difference is important: with buckling when stability it lost, the closest, stable equilibrium state is infinitesimally close the state just prior to buckling. With snapping, the nearest equilibrium state is a finite distance away, and all the intermediate equilibrium states are inaccessible without some external controls.

Mathematica Code (Expand)

Note: Code is from Mathematica 10.3

```[wlcode](*Snap-Through of a Simple Arch

Douglas P. Holmes, Boston University
www.bu.edu/moss

Reference:
[1] J.M.T. Thompson, G.W. Hunt, "A General Theory of Elastic Stability", John Wiley & Sons, London, (1973).*)

(*Under the hood: Defining variables, plotting details, and generating a list*)

k = 1;

R = 1;

\[Alpha] = \[Pi]/2;

step = 0.1;

pSizeRed = 0.04;
pSizeGray = 0.0325;

qList = Range[\[Alpha], \[Alpha]/\[Sqrt]3, -step]~Join~
Range[-2 \[Alpha]/\[Sqrt]3, -2 \[Alpha]/\[Sqrt]3 - 1/3, -step]~
Join~Range[-2 \[Alpha]/\[Sqrt]3 - 1/3, -\[Alpha]/\[Sqrt]3, step]~
Join~Range[2 \[Alpha]/\[Sqrt]3, 2 \[Alpha]/\[Sqrt]3 + 1/3, step]~
Join~Range[2 \[Alpha]/\[Sqrt]3 + 1/3, \[Alpha], -step];

X = Table[-Q1 + \[Alpha], {Q1, qList}];

\[Alpha]Step =
Range[\[Alpha], -\[Alpha], -step]~Join~
Range[-\[Alpha], \[Alpha], step];[/wlcode]```

A Simple Arch — Show original/deformed arches

[wlcode]archRef = Show[
Plot[\[Alpha] x + R \[Alpha], {x, -1, 0},
PlotRange -> {All, {-0.1 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.02] , Ticks -> None,
AxesStyle -> LightGray, Method -> {“AxesInFront” -> False},
ImageSize -> 400],
Plot[-\[Alpha] x + R \[Alpha], {x, 0, 1},
PlotRange -> {All, {-0.1 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.02]],
Graphics[{LightGray, PointSize[pSizeGray], Point[{-1, 0}]}],
Graphics[{LightGray, PointSize[pSizeGray], Point[{1, 0}]}],
Graphics[{Red, PointSize[pSizeRed], Point[{0, R \[Alpha]}]}],
Graphics[Text[Style[“R”, Large, Bold] , {0.5 R, 0.1 \[Alpha]}]],
Graphics[
Text[Style[“k”, Large, Bold] , {-0.55 R, 0.65 \[Alpha]}]],
Graphics[
Text[Style[“\[Alpha]”, Large, Bold] , {-0.75 R, 0.1 \[Alpha]}]],
Graphics[{Arrowheads[{-.05, .05}], Arrow[{{0, 0}, {R, 0}}]}] ];
archDef = Show[
Plot[\[Alpha]/2 x + R \[Alpha]/2, {x, -1, 0},
PlotRange -> {All, {-0.1 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.02] , Ticks -> None,
AxesStyle -> LightGray, Method -> {“AxesInFront” -> False},
ImageSize -> 400],
Plot[-\[Alpha]/2 x + R \[Alpha]/2, {x, 0, 1},
PlotRange -> {All, {-0.1 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.02]],
Graphics[{LightGray, PointSize[pSizeGray], Point[{-1, 0}]}],
Graphics[{LightGray, PointSize[pSizeGray], Point[{1, 0}]}],
Graphics[{Red, PointSize[pSizeRed], Point[{0, R \[Alpha]/2}]}],
Arrow[{{0, R \[Alpha]}, {0, R \[Alpha]/2}}]}],
Graphics[
Text[Style[“P”, Large, Bold] , {0, R \[Alpha] + 0.1 \[Alpha]}]],
Graphics[
Text[Style[“\!\(\*SubscriptBox[\(Q\), \(1\)]\)”, Large,
Bold] , {-0.55 R, 0.1 \[Alpha]}]] ];
GraphicsRow[{archRef, archDef}][/wlcode]

Energies, and First & Second Variations

[wlcode]U[Q1_] := 1/4 k R^2 (\[Alpha]^4 – 2 \[Alpha]^2 Q1^2 + Q1^4)

\[Zeta][Q1_] := R (\[Alpha] – Q1)

V[Q1_, P_] := U[Q1] – P \[Zeta][Q1]

P[Q1_] := Evaluate[ P /. Solve[D[V[Q1, P], Q1] == 0, P]];

V11[Q1_] := Evaluate[D[V[Q1, P], {Q1, 2}]][/wlcode]

Animate/Manipulate plots of arch configuration, first and second variations

[wlcode]archEQ[Q1_] := Show[
Plot[Q1 x + R (Q1), {x, -1, 0},
PlotRange -> {All, {-1.5 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.02] , Ticks -> None,
AxesStyle -> LightGray, Method -> {“AxesInFront” -> False},
ImageSize -> 333],
Plot[-Q1 x + R (Q1), {x, 0, 1},
PlotRange -> {All, {-1.5 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.02]],
Graphics[{LightGray, PointSize[pSizeGray], Point[{-1, 0}]}],
Graphics[{LightGray, PointSize[pSizeGray], Point[{1, 0}]}],
Graphics[{Red, PointSize[pSizeRed], Point[{0, R Q1}]}] ];
archPvQ[Q1_] := Show[
Plot[P[q1][[1]], {q1, -2 \[Alpha], -\[Alpha]/\[Sqrt]3},
PlotRange -> {{-1.3 \[Alpha], 1.3 \[Alpha]}, {-1.1 \[Alpha],
1.1 \[Alpha]}}, PlotStyle -> {Black, Thickness[0.01]},
Frame -> {{True, False}, {True, False}} ,
FrameLabel -> {“\!\(\*SubscriptBox[\(Q\), \(1\)]\)”,
“P(\!\(\*SubscriptBox[\(Q\), \(1\)]\))”},
FrameTicks -> {{None,
None}, {{{-\[Alpha], “-\[Alpha]”}, {-\[Alpha]/\[Sqrt]3,
“-\!\(\*FractionBox[\(\[Alpha]\), \(\[Sqrt]3\)]\)”},
0, {\[Alpha]/\[Sqrt]3,
“\!\(\*FractionBox[\(\[Alpha]\), \(\[Sqrt]3\)]\)”}, \
{\[Alpha], “\[Alpha]”}}, None}}, ImageSize -> 333],
Plot[P[q1][[1]], {q1, -\[Alpha]/\[Sqrt]3, \[Alpha]/\[Sqrt]3},
PlotRange -> {{-1.1 \[Alpha],
1.1 \[Alpha]}, {-\[Alpha], \[Alpha]}},
PlotStyle -> {Gray, Dotted, Thickness[0.0055]}],
Plot[P[q1][[1]], {q1, \[Alpha]/\[Sqrt]3, 2 \[Alpha]},
PlotRange -> {{-1.1 \[Alpha],
1.1 \[Alpha]}, {-\[Alpha], \[Alpha]}},
PlotStyle -> {Black, Thickness[0.01]}],
Graphics[{Gray, PointSize[pSizeGray],
Point[{-\[Alpha]/\[Sqrt]3, -(\[Pi]^3/(12 Sqrt[3]))}]}],
Graphics[{Gray, PointSize[pSizeGray], Point[{0, 0}]}],
Graphics[{Gray, PointSize[pSizeGray],
Point[{\[Alpha]/\[Sqrt]3, \[Pi]^3/(12 Sqrt[3])}]}],
Graphics[{Red, PointSize[pSizeRed],
Point[{Q1, k R Q1 (\[Alpha]^2 – Q1^2)}]}] ];
archV11[Q1_] := Show[
Plot[V11[q1], {q1, -2 \[Alpha], -\[Alpha]/\[Sqrt]3},
PlotRange -> {{-1.3 \[Alpha], 1.3 \[Alpha]}, {-2 \[Alpha],
4 \[Alpha]}}, PlotStyle -> {Black, Thickness[0.01]},
Frame -> {{True, False}, {True, False}} ,
FrameLabel -> {“\!\(\*SubscriptBox[\(Q\), \(1\)]\)”,
“\!\(\*SubscriptBox[\(\[PartialD]\), \(11\)]\)V”},
FrameTicks -> {{{{-\[Alpha]^2,
“-\!\(\*SuperscriptBox[\(\[Alpha]\), \(2\)]\)”}, 0},
None}, {{-\[Alpha], “-\[Alpha]”}, {-\[Alpha]/\[Sqrt]3,
“-\!\(\*FractionBox[\(\[Alpha]\), \(\[Sqrt]3\)]\)”},
0, {\[Alpha]/\[Sqrt]3,
“\!\(\*FractionBox[\(\[Alpha]\), \(\[Sqrt]3\)]\)”}, {\[Alpha],
“\[Alpha]”}, None}}, ImageSize -> 333],
Plot[V11[q1], {q1, -\[Alpha]/\[Sqrt]3, \[Alpha]/\[Sqrt]3 },
PlotStyle -> {Gray, Dotted, Thickness[0.0055]}],
Plot[V11[q1], {q1, \[Alpha]/\[Sqrt]3, 2 \[Alpha]},
PlotRange -> {All, {-2 \[Alpha], 4 \[Alpha]}},
PlotStyle -> {Black, Thickness[0.01]}],
Graphics[{Red, PointSize[pSizeRed], Point[{Q1, V11[Q1]}]}],
Graphics[{Gray, PointSize[pSizeGray],
Point[{\[Alpha]/\[Sqrt]3, 0}]}],
Graphics[{Gray, PointSize[pSizeGray],
Point[{-\[Alpha]/\[Sqrt]3, 0}]}] ];

(*Animate[GraphicsRow[{archEQ[Q1],archPvQ[Q1],archV11[Q1]}],{Q1,\
\[Alpha],-\[Alpha]}, AnimationDirection\[Rule]ForwardBackward]*)

Manipulate[
GraphicsRow[{archEQ[Q1], archPvQ[Q1],
archV11[Q1]}], {Q1, \[Alpha], -\[Alpha]}][/wlcode]

Animations of stable equilibrium arch configurations and snap-through

[wlcode]archSnap[Q1_] := Show[
Plot[Q1 x + R (Q1), {x, -1, 0},
PlotRange -> {All, {-1.5 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.015], Ticks -> {None, None},
AxesStyle -> LightGray, Method -> {“AxesInFront” -> False},
ImageSize -> 500],
Plot[-Q1 x + R (Q1), {x, 0, 1},
PlotRange -> {All, {-1.5 \[Alpha], 1.5 \[Alpha]}},
PlotStyle -> Thickness[0.015]],
Graphics[{LightGray, PointSize[pSizeGray], Point[{-1, 0}]}],
Graphics[{LightGray, PointSize[pSizeGray], Point[{1, 0}]}],
Graphics[{Red, PointSize[pSizeRed], Point[{0, R Q1}]}]];

archPvD[Q1_] := Show[
Plot[-P[q1 – \[Alpha]][[
1]], {q1, -1, -\[Alpha]/\[Sqrt]3 + \[Alpha]},
PlotRange -> {{-\[Alpha]/2, 2.5 \[Alpha]}, {-3 \[Alpha],
3 \[Alpha]}}, PlotStyle -> {Black, Thickness[0.01]},
Ticks -> {{{\[Alpha], “\[Alpha]”, {0, 0.04}}, {2 \[Alpha],
“2 \[Alpha]”, {0, 0.04}}}, None},
AxesLabel -> {“R(\[Alpha]-\!\(\*SubscriptBox[\(Q\), \(1\)]\))”,
“P/k”}, BaseStyle -> FontSize -> 14,
Method -> {“AxesInFront” -> False}, ImageSize -> 500],
Plot[-P[q1 – \[Alpha]][[
1]], {q1, -\[Alpha]/\[Sqrt]3 + \[Alpha], \[Alpha]/\[Sqrt]3 + \
\[Alpha]},
PlotRange -> {{-1.1 \[Alpha],
1.1 \[Alpha]}, {-\[Alpha], \[Alpha]}},
PlotStyle -> {Gray, Dotted, Thickness[0.0035]}],
Plot[-P[q1 – \[Alpha]][[1]], {q1, \[Alpha]/\[Sqrt]3 + \[Alpha],
3 \[Alpha]}, PlotStyle -> {Black, Thickness[0.01]}],
Graphics[{LightGray, PointSize[pSizeGray],
Point[{-\[Alpha]/\[Sqrt]3 + \[Alpha], \[Pi]^3/(12 Sqrt[3])}]}],
Graphics[{Gray, PointSize[pSizeGray],
Point[{2 \[Alpha]/\[Sqrt]3 + \[Alpha], \[Pi]^3/(12 Sqrt[3])}]}],
Graphics[{LightGray, PointSize[pSizeGray],
Point[{\[Alpha]/\[Sqrt]3 + \[Alpha], -(\[Pi]^3/(
12 Sqrt[3]))}]}],
Graphics[{Gray, PointSize[pSizeGray],
Point[{-2 \[Alpha]/\[Sqrt]3 + \[Alpha], -(\[Pi]^3/(
12 Sqrt[3]))}]}],
Graphics[{Red, PointSize[pSizeRed],
Point[{-Q1 + \[Alpha], k R Q1 (\[Alpha]^2 – Q1^2)}]}],
Graphics[{Blue,
Arrow[{{-\[Alpha]/\[Sqrt]3 + 1.3 \[Alpha], \[Pi]^3/(
12 Sqrt[3])}, {2 \[Alpha]/\[Sqrt]3 + 0.8 \[Alpha], \[Pi]^3/(
12 Sqrt[3])}}]}],
Graphics[{Blue,
Arrow[{{\[Alpha]/\[Sqrt]3 + 0.7 \[Alpha], -(\[Pi]^3/(
12 Sqrt[3]))}, {-2 \[Alpha]/\[Sqrt]3 +
1.2 \[Alpha], -(\[Pi]^3/(12 Sqrt[3]))}}]}],
Graphics[Text[“Snap”, {1.35 \[Alpha], \[Pi]^3/(12 Sqrt[3]) + 0.4}]],
Graphics[
Text[“Snap”, {0.7 \[Alpha], – (\[Pi]^3/(12 Sqrt[3])) – 0.4}]] ];

(*Animate[GraphicsRow[{archSnap[Q1],archPvD[Q1]}],{Q1,\[Alpha]-X}, \
AnimationDirection\[Rule]Forward]*)

Manipulate[
GraphicsRow[{archSnap[Q1], archPvD[Q1]}], {Q1, \[Alpha] – X, Slider}][/wlcode]

1. The popper toy is a bit of a peculiar example, as its everted – or inside-out – shape is metastable, which is why it snaps back. This metastability comes from a small amount of viscoelasticity within the material.
2. Free to pivot, or rotate in the plane of the page without resistance.
3. Why did I choose such an annoying variable name? This is for consistency with the concept of generalized coordinates. The subscript makes it clear that this is a one degree of freedom system.
4. To plot this curve, I took the spring stiffness and half-span to be equal to one.
5. When the second variation is identically zero, we cannot say anything about its stability, and therefore we have to examine the third variations. Doing so would reveal that these are unstable critical or limit points.
6. While it has multiple points of equilibrium in the absence of force, although only two of the three points are stable.