RasmahRasmah

Eigenproblems

Overview

The solid and fluid chapters solved forward problems: given loads, find the response. Eigenproblems ask a different question — what happens on its own? Three physical questions share the same mathematical shape, a generalized eigenproblem $A x = \lambda B x$:

  • Eigenfrequency — at what frequencies does a structure naturally vibrate?
  • Buckling — at what compressive load does a column collapse sideways?
  • Acoustics — at what frequencies does a cavity resonate?

All three are solved with the same solve(Physics(), …) marker pattern; the answer is a set of eigenvalues (frequencies or load factors) and eigenvectors (mode shapes) rather than a single field.

Free vibration

A structure's natural vibrations are the eigenpairs of its stiffness $K$ against its mass $M$,

\[K \varphi = \omega^2 M \varphi ,\]

where each $\omega$ is an angular frequency and $\varphi$ its mode shape. The lowest modes matter most, because those are the ones a real excitation is most likely to hit.

Rasmah.EigenfrequencyType
Eigenfrequency

Free (modal) vibration: solve the generalized eigenproblem $K\varphi = \omega^2 M\varphi$ for the natural frequencies and mode shapes of a structure.

Theory

A structure's natural vibrations are the eigenpairs of its stiffness $K$ against its mass $M$: $K\varphi = \omega^2 M\varphi$. Each eigenvalue $\omega^2$ is a squared angular frequency, and its eigenvector $\varphi$ the corresponding mode shape. The lowest modes are the ones a structure is most likely to be excited into, so they matter for design.

Solving

solve(Eigenfrequency(), m, material; fixed, nev = 6) returns (; frequencies, values, modes) — the natural frequencies in Hz, the $\omega^2$ values, and the mode shapes. The material supplies the stiffness and the density (for the mass matrix). Fixed supports (via fixed) remove rigid-body modes.

Example

julia> Eigenfrequency() isa AbstractPhysics
true
source

A worked example: a block fixed on one face

m = tetrahedralize_box(1.0, 1.0, 1.0, 6, 6, 6)
left = nodes_in_box(m, [0.0, 0.0, 0.0], [0.0, 1.0, 1.0])

r = solve(Eigenfrequency(), m, steel; fixed=left, nev=4)
round.(r.frequencies; digits=3)
4-element Vector{Quantity{Float64}}:
 559.475 Hz
 570.117 Hz
 798.921 Hz
 1300.513 Hz

The first four natural frequencies of a steel block clamped on one face come out at $559$, $570$, $799$, and $1300$ Hz. Each is paired with a mode shape — the deformation pattern the structure takes at that frequency:

vtk(m; field=r.modes[1][1:3:end], fieldname="mode 1 u_x", edges=false)

Buckling

A column shortens under compression — until a critical load, when it suddenly bows sideways instead. That instability is buckling. The geometric (stress) stiffness $K_\sigma$ captures the effect: compression adds a destabilizing term, and buckling happens at the smallest load multiple $\lambda$ for which

\[K \varphi = \lambda\,(-K_\sigma) \varphi\]

has a solution. $\lambda$ is the critical load factor — multiply the reference load by it and the structure buckles.

Rasmah.BucklingType
Buckling

Linear (bifurcation) buckling: solve $K\varphi = \lambda(-K_\sigma)\varphi$ for the critical load factors and buckling modes of a compressed structure.

Theory

A column under compression stiffens or softens depending on the load. The geometric (stress) stiffness $K_\sigma$ captures that: a compressive load adds a destabilizing term, and at a critical multiple $\lambda$ of the load the structure bifurcates — it buckles sideways instead of shortening. The critical factor is the smallest eigenvalue of $K\varphi = \lambda(-K_\sigma)\varphi$, where $K$ is the elastic stiffness and $K_\sigma$ is built from the stress of the pre-buckling state.

Solving

solve(Buckling(), m, material; fixed, loads, nev = 6) first solves the pre-buckling state under the reference loads, then returns (; factors, modes) — the critical load factors $\lambda$ (multiply the reference load by $\lambda$ to buckle) and the buckling mode shapes.

Example

julia> Buckling() isa AbstractPhysics
true
source

A worked example: the critical load

n = size(m.nodes, 2)
right = nodes_in_box(m, [1.0, 0.0, 0.0], [1.0, 1.0, 1.0])

loads = zeros(3n)
for i in right.ids
    loads[3i-2] = -1e8 / length(right.ids)
end

rb = solve(Buckling(), m, steel; fixed=left, loads=loads, nev=3)
round.(rb.factors; digits=3)
3-element Vector{Float64}:
 251.858
 262.139
 439.995

The reference load was $10^8$ N of compression; the first factor $\lambda \approx 252$ says the column buckles when that load is scaled to $\approx 2.5\times10^{10}$ N.

Acoustic cavity modes

Sound in a cavity is a pressure field whose standing waves satisfy the Helmholtz equation. The eigenmodes are

\[K p = \frac{\omega^2}{c^2} M p ,\]

so the resonance frequencies are $f = \omega/2\pi$, set by the sound speed $c$ and the cavity size. A rigid cavity's lowest non-trivial mode is the half-wavelength $f_1 = c/(2L)$.

Rasmah.AcousticsType
Acoustics

Acoustic cavity modes: the scalar Helmholtz eigenproblem $K p = (\omega^2/c^2) M p$ for the standing-wave frequencies of an enclosed fluid.

Theory

Sound in a cavity is a pressure field $p$ whose standing waves satisfy the Helmholtz equation. Its eigenmodes obey $K p = (\omega^2/c^2) M p$, where $c$ is the sound speed of the fluid and $\omega$ the angular frequency, so the mode frequencies are $f = \omega/2\pi$. A rigid wall admits a constant-pressure mode at $\omega = 0$; pin one pressure dof (via fixed) to remove it.

Solving

solve(Acoustics(), m, material; fixed, nev = 6) returns (; frequencies, wavenumbers, values, modes) — the mode frequencies in Hz, the wavenumbers $\omega/c$, the $\omega^2$ values, and the pressure mode shapes. The material supplies the sound_speed (derived from its elastic constants and density).

Example

julia> Acoustics() isa AbstractPhysics
true
source

A worked example: the fundamental cavity mode

air = Material(youngs_modulus=1.4e5, poisson_ratio=0.25, density=1.2)
sound_speed(air)
374.16573867739413
ra = solve(Acoustics(), m, air; fixed=[1], nev=4)
round.(ra.frequencies; digits=3)
4-element Vector{Quantity{Float64}}:
 19.802 Hz
 189.222 Hz
 189.222 Hz
 195.836 Hz

The sound speed is $\approx 374$ m/s, so a unit cavity's first standing wave sits near $c/(2L) = 187$ Hz — the $189$ Hz pair in the spectrum (two degenerate directions). The mode shape is the pressure field of that wave:

vtk(m; field=ra.modes[2], fieldname="pressure mode", edges=false)

Next steps

Eigenproblems reuse the sparse stiffness and mass matrices assembled in the forward FEM chapters, and the eigensolver is part of the Sparse linear algebra chapter. For the physics these modes describe — vibration, stability, and acoustics — the forward solves are in the earlier FEM chapters.