RasmahRasmah

Shape-Memory Alloys (Pseudoelasticity)

Overview

Shape-memory alloys such as Nitinol recover large strains after unloading — not because they stay elastic, but because a stress-induced martensitic transformation stores and releases deformation reversibly. The Auricchio model (Auricchio & Taylor 1997; Brinson 1993) splits the total strain into an elastic part and a transformation part

\[\varepsilon = \varepsilon_{el} + \varepsilon_L \xi, \qquad \sigma = E(\varepsilon - \varepsilon_L \xi)\]

where ξ ∈ [0,1] is the martensite volume fraction and ε_L the maximum transformation strain. Transformation advances between four critical stresses:

\[\text{forward (A→M):}\ |\sigma| = \sigma_{MS} + (\sigma_{MF}-\sigma_{MS})\xi, \qquad \text{reverse (M→A):}\ |\sigma| = \sigma_{AS} - (\sigma_{AS}-\sigma_{AF})\xi\]

The result is the flag-shaped hysteresis loop that makes SMAs useful as dampers, stents and actuators.

using Rasmah

A loading–unloading cycle

Create a model and drive it through a monotone strain path that loads past the finish stress and unloads back to zero, then read back the stress–strain loop.

sma = SMAModel(; E=7e10, εL=0.05, σMS=5e8, σMF=6e8, σAS=3e8, σAF=2e8)

εs = vcat(range(0.0, 0.06; length = 100), range(0.06, 0.0; length = 100))
_, σs = sma_cycle(sma, εs)
println("peak stress = ", round(maximum(σs) / 1e6; digits = 1), " MPa")
peak stress = 700.0 MPa

Verification — the flag-shaped loop

The model’s fingerprints are the four transformation stresses. On loading the stress must plateau at σMS → σMF and on unloading at σAS → σAF; the loop encloses a finite area (energy dissipated per cycle):

loading   = σs[1:100]
unloading = σs[101:200]
println("loading plateau   ≈ ", round(sum(loading[end-20:end]) / 20 / 1e6; digits = 1), " MPa  (σMF = 600 MPa)")
println("unloading plateau ≈ ", round(sum(unloading[1:20]) / 20 / 1e6; digits = 1), " MPa  (σAS = 300 MPa)")

# hysteresis area (integrate with the trapezoid rule)
area = sum(((σs[i] + σs[i+1]) / 2) * (εs[i+1] - εs[i]) for i in 1:(length(εs)-1))
println("dissipated energy/cycle = ", round(abs(area) / 1e6; digits = 2), " MJ/m³")
loading plateau   ≈ 628.9 MPa  (σMF = 600 MPa)
unloading plateau ≈ 361.9 MPa  (σAS = 300 MPa)
dissipated energy/cycle = 15.0 MJ/m³

The area is nonzero and positive, confirming irreversible energy dissipation — the source of the material’s damping.

Next steps