Eigenfrequency and Buckling Topology Optimization
Overview
Not every design goal is static stiffness. Two vibrational goals matter for lightweight structures:
- Eigenfrequency maximization — push the lowest natural frequency up (away from excitation), so the structure avoids resonance.
- Buckling resistance — push the critical buckling load factor up, so the structure does not collapse sideways under compression.
Both are eigenproblems: the state is (K − ω²M)φ = 0 (free vibration) or (K + λKσ)φ = 0 (buckling). Rasmah differentiates these with the modal adjoint and optimizes with MMA.
Maximizing the fundamental frequency
EigenfrequencyTopOpt maximizes the lowest eigenvalue of K φ = ω²M φ:
using Rasmah
m = tetrahedralize_box(1.0, 1.0, 1.0, 3, 3, 3)
bs = box_boundary_sets(m, 1.0, 1.0, 1.0)
fixed = dofs(m, bs[:zmin])
x, hist = solve(EigenfrequencyTopOpt(), m, Material(youngs_modulus=1e3, poisson_ratio=0.3, density=1.0);
fixed = fixed, volfrac = 0.5, max_iter = 15)
println("normalized objective ", round(hist[1]; digits = 2), " → ", round(hist[end]; digits = 2))
println("(the objective is −ω₁²/ωref², so it *decreasing* means the frequency rises)")
vtk(m; field = x, fieldname = "density", edges = true)normalized objective -1.0 → -0.46
(the objective is −ω₁²/ωref², so it *decreasing* means the frequency rises)
A decreasing objective means the fundamental frequency increased — the material is re-distributed to stiffen the dominant vibration mode.
Maximizing the buckling load
BucklingTopOpt maximizes the critical load factor of (K + λKσ)φ = 0, where Kσ is the geometric stiffness from the pre-buckling stress:
xb, histb = solve(BucklingTopOpt(), m, Material(youngs_modulus=1e3, poisson_ratio=0.3, density=1.0);
fixed = fixed, loads = bs[:zmax] => [0.0, 0.0, -1.0],
volfrac = 0.5, max_iter = 15)
println("normalized buckling objective ", round(histb[1]; digits = 2), " → ", round(histb[end]; digits = 2))
vtk(m; field = xb, fieldname = "density", edges = true)normalized buckling objective -1.0 → -2.49
Next steps
- Phononic band-gap optimization — opening a gap between two frequencies rather than moving one.
- Acoustic cavity optimization — the same eigenproblem for a scalar (pressure) field.
- Harmonic response — the forced (non-eigen) frequency-domain response.
