Flutter Speed Prediction (aerodynamics/aeroelasticity/flutter-speed-prediction)
Use when the task is the classical flutter condition of a
two-degree-of-freedom wing section: the flutter speed where the
bending-torsion modes lose stability, found with the V-g method, the
frequency coalescence check, and the flutter margin against the design
dive speed for flutter clearance in the FAR 25.629 context. This leaf
is the dynamic counterpart of
aerodynamics/aeroelasticity/divergence-speed (static divergence); it is
also distinct from structures/fem/modal-analysis (mode extraction) and
aerodynamics/high-speed/swept-wing-aerodynamics (sweep effects), which
feed and shape multi-mode flutter work.
Domain quick reference
- Binary typical section: plunge h (positive down) and pitch theta
(positive nose-up) about an elastic axis at a*b from the mid-chord
(positive aft; a = -0.2 is the elastic axis at 40 percent chord), with
semi-chord b. The structural parameters are the mass ratio mu = m /
(pi * rho * b^2), the static unbalance x_theta (the distance from the
elastic axis to the center of gravity divided by b, the inertia
coupling), the radius of gyration squared r_theta^2 (inertia about the
elastic axis I_theta = m * r_theta^2 * b^2), and the uncoupled bending
and torsion frequencies omega_h and omega_theta (stiffnesses K_h = m *
omega_h^2 and K_theta = I_theta * omega_theta^2).
- Unsteady aerodynamics: the Theodorsen loads with the complex
lift-deficiency function C(k) = H1^(2)(k) / (H1^(2)(k) + i H0^(2)(k))
built from Bessel J and Y series (Abramowitz and Stegun 9.1.10 to
9.1.11), evaluated at harmonic motion with the reduced frequency k =
omega * b / V. Limits: C = 1 in steady flow (k = 0) and C = 1/2 at
high reduced frequency. Quasi-steady aerodynamics (C = 1) is known to
give erroneous pitch damping and is not used here.
- V-g method: for each reduced frequency k the flutter determinant is
solved with an artificial structural damping g added to the stiffness,
det[K(1 + i g) - lambda E(k)] = 0, for real lambda = omega^2 and real
g. g < 0 means the aerodynamic damping stabilizes the mode (negative
artificial damping would be needed to sustain harmonic motion), g = 0
is the neutral condition, and g > 0 means the mode is unstable. The
flutter speed is the lowest airspeed where a mode's g rises through
zero as V increases. This is a simple p-k style eigenvalue approach on
the 2 x 2 aeroelastic system, a first-estimate typical section model,
not a production flutter clearance tool.
- Flutter boundary: the flutter speed grows with the structural
stiffness (a stiff section flutters at much higher speed, and the
rigid limit is enormous), depends on the inertia coupling x_theta (no
static unbalance leaves no classical flutter mechanism), on the
frequency ratio omega_h / omega_theta, on the elastic axis location a,
and on the aerodynamic stiffness (the circulatory V^2 terms that also
drive static divergence).
- Frequency coalescence: in the classical mechanism the two modal
frequencies converge strongly as the airspeed approaches the flutter
boundary; the coalescence check reports the minimum frequency gap and
the speed where it occurs, and the exact branch merge sits at or just
above the flutter speed.
- Divergence versus flutter: flutter is the dynamic bending-torsion
oscillation that loses stability at the damping crossing; divergence
is the static torsional instability where the torsion stiffness
vanishes at a higher dynamic pressure. For the typical section the
torsion frequency collapses to zero at the divergence speed; static
divergence analysis belongs to
aerodynamics/aeroelasticity/divergence-speed.
- Flutter margin and clearance: margin = V_F / V_D against the design
dive speed; clearance practice keeps the margin at or above 1.15 x
V_D. FAR 25.629 (and the European counterpart CS 25.629) is the
airworthiness context for transport category flutter clearance; the
standards are referenced by name only, never reproduced
(standards-map.yaml far-25 and cs-25, both reference-only).
Workflow
- Gather the section inputs: mass ratio mu, static unbalance x_theta,
radius of gyration squared r_theta^2, uncoupled frequencies omega_h
and omega_theta, elastic axis location a, semi-chord b, and the
flight density rho (the ISA sea level default 1.225 kg/m^3).
- Confirm the inertia coupling: x_theta must be non-negative (center
of gravity aft of the elastic axis); without it there is no classical
flutter mechanism.
- Sweep the reduced frequency with vg_damping_crossing over a range
such as k in [0.05, 4] and inspect the per-mode rows (airspeed,
frequency, g): both modes must be damped (g < 0) at the low-speed
end, and the flutter branch must rise through g = 0 as the airspeed
grows.
- Locate the flutter speed with flutter_speed_binary, which bisects on
the g = 0 crossing and returns the flutter speed, the flutter
frequency, the reduced frequency, and the other mode's frequency at
the flutter point. A None result means no crossing inside the scanned
reduced frequency range.
- Check the mechanism with frequency_coalescence_check: the modal
frequency gap should shrink well below its low-speed value near the
flutter boundary (coalescing True), confirming the classical
frequency-coalescence flutter mechanism.
- Assess the clearance with flutter_margin(v_f, v_design): a margin at
or above the 1.15 clearance practice (FAR 25.629 context) is
acceptable; below it the section needs stiffness or damping changes,
and the analysis is re-run from step 3.
- Confirm the deterministic behavior with the contract test
scripts/test_flutter_speed_prediction.py.
Worked example
Classic typical section benchmark: b = 1 m semi-chord, elastic axis at
a = -0.2 (40 percent chord), center of gravity 0.2 m aft of the elastic
axis (x_theta = 0.2), r_theta^2 = 0.24, mu = 20, omega_h = 30 rad/s,
omega_theta = 50 rad/s, sea level air (rho = 1.225 kg/m^3).
- V-g sweep: at k = 4 (about 14 m/s) both modes are damped, g = -0.011
for the torsion branch and g = -0.017 for the bending branch; the
torsion branch rises through g = 0 between k = 0.5 (g = -0.025, about
85.6 m/s) and k = 0.46 (g = +0.002, about 89.1 m/s).
- flutter_speed_binary gives the flutter point where the damping crosses
zero: V_F = 88.85 m/s at reduced frequency k_F = 0.462, flutter
frequency omega_F = 41.07 rad/s, with the bending branch at 30.10
rad/s. Normalized: V_F / (b * omega_theta) = 1.78 and omega_F /
omega_theta = 0.82, the classic typical section result.
- frequency_coalescence_check: the modal frequency gap shrinks from 27.7
rad/s at low speed to 8.0 rad/s at the coalescence station (about 94
m/s, 30.7 rad/s), a 71 percent convergence: coalescing True, the
classical mechanism.
- flutter_margin: with a design dive speed V_D = 80 m/s the margin is
88.85 / 80 = 1.111, below the 1.15 clearance practice, so the section
is flagged at flutter risk; with V_D = 70 m/s the margin is 1.269 and
the clearance closes.
- Divergence context: the torsion frequency collapses to zero at the
static divergence speed of about 141 m/s, above the flutter speed, so
flutter is the critical instability for this section.
Related leaves
- aerodynamics/aeroelasticity/divergence-speed: the static counterpart
(divergence dynamic pressure, divergence speed, and divergence margin
for the same typical section geometry).
- aerodynamics/high-speed/swept-wing-aerodynamics: spanwise sweep
couples bending and torsion through the flow and shifts the flutter
boundary of the wing.
- structures/fem/modal-analysis: structural mode shapes and frequencies
that feed multi-mode flutter analyses beyond the two-DOF typical
section.
Pitfalls
- Using quasi-steady aerodynamics (C = 1) for the damping search: it is
documented to give erroneous pitch damping, so the flutter crossing is
computed with the full Theodorsen C(k) - do not shortcut the
deficiency function.
- Reading a mode as stable because g is negative at one speed: the V-g
sweep must show both modes damped at the low-speed end and the
torsion branch rising through g = 0 as airspeed grows; a single point
is not a stability verdict.
- Treating a None flutter speed as "no flutter": flutter_speed_binary
returns None when no g = 0 crossing exists inside the scanned reduced
frequency range - widen the k sweep before concluding the section is
flutter-free.
- Neglecting the static-unbalance requirement: with x_theta = 0 there is
no inertia coupling and no classical flutter mechanism, so a
zero-unbalance section must not be pushed through the binary search
as if it could flutter; a negative x_theta (elastic axis aft of the
center of gravity) is rejected because the mechanism assumption
breaks.
- Clearing against the margin without checking the mechanism: the
frequency_coalescence_check verdict (gap shrinking from 27.7 to 8.0
rad/s in the benchmark) confirms the coalescence mechanism - a
clearance margin alone does not prove the flutter boundary was found.
- Forgetting that flutter and divergence are different instabilities:
the torsion frequency collapsing to zero at about 141 m/s is static
divergence (divergence-speed leaf), not the 88.85 m/s flutter
crossing this leaf locates.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_flutter_speed_prediction.py
The test covers the Bessel reference values, the published C(k) values
and limits, low-speed stability (negative g), the torsion damping
crossing, the benchmark flutter speed and its normalized classic values,
the no-crossing-within-range and rigid edge cases, the coalescence
verdict, the flutter margin verdicts, and invalid-input edge cases.
Compliance
- The typical section flutter analysis is public-domain textbook
methodology (Theodorsen 1935, NACA Report 496; Bisplinghoff, Ashley
and Halfman, Aeroelasticity; Hodges and Pierce, Introduction to
Structural Dynamics and Aeroelasticity); the airworthiness context is
FAR 25.629 and CS 25.629, referenced by name only, summary-only per
standards-map.yaml (both reference-only).
- compliance: STANDARDS-REF, gated: false.
1---2name: flutter-speed-prediction3description: Use when the task is classical wing flutter of the two-DOF typical section, the V-g method, damping crossing, frequency coalescence, or flutter clearance. Compute the classical flutter speed of a two-degree-of-freedom bending-torsion wing section: build the typical section with plunge and pitch about the elastic axis, apply Theodorsen unsteady aerodynamics with the complex lift-deficiency function C(k), run the V-g method across the reduced frequency range, locate the flutter speed where the artificial structural damping g crosses zero, check frequency coalescence near the flutter boundary, and assess the flutter margin against the design dive speed in the FAR 25.629 clearance context. Produces the flutter speed, flutter frequency, reduced frequency, coalescence verdict, and a clearance margin assessment. Trigger: flutter speed, v-g method, bending-torsion flutter, frequency coalescence, typical section, flutter margin, far 25.629.4license: Apache-2.05---67# Flutter Speed Prediction (aerodynamics/aeroelasticity/flutter-speed-prediction)89Use when the task is the classical flutter condition of a10two-degree-of-freedom wing section: the flutter speed where the11bending-torsion modes lose stability, found with the V-g method, the12frequency coalescence check, and the flutter margin against the design13dive speed for flutter clearance in the FAR 25.629 context. This leaf14is the dynamic counterpart of15aerodynamics/aeroelasticity/divergence-speed (static divergence); it is16also distinct from structures/fem/modal-analysis (mode extraction) and17aerodynamics/high-speed/swept-wing-aerodynamics (sweep effects), which18feed and shape multi-mode flutter work.1920## Domain quick reference2122- Binary typical section: plunge h (positive down) and pitch theta23 (positive nose-up) about an elastic axis at a*b from the mid-chord24 (positive aft; a = -0.2 is the elastic axis at 40 percent chord), with25 semi-chord b. The structural parameters are the mass ratio mu = m /26 (pi * rho * b^2), the static unbalance x_theta (the distance from the27 elastic axis to the center of gravity divided by b, the inertia28 coupling), the radius of gyration squared r_theta^2 (inertia about the29 elastic axis I_theta = m * r_theta^2 * b^2), and the uncoupled bending30 and torsion frequencies omega_h and omega_theta (stiffnesses K_h = m *31 omega_h^2 and K_theta = I_theta * omega_theta^2).32- Unsteady aerodynamics: the Theodorsen loads with the complex33 lift-deficiency function C(k) = H1^(2)(k) / (H1^(2)(k) + i H0^(2)(k))34 built from Bessel J and Y series (Abramowitz and Stegun 9.1.10 to35 9.1.11), evaluated at harmonic motion with the reduced frequency k =36 omega * b / V. Limits: C = 1 in steady flow (k = 0) and C = 1/2 at37 high reduced frequency. Quasi-steady aerodynamics (C = 1) is known to38 give erroneous pitch damping and is not used here.39- V-g method: for each reduced frequency k the flutter determinant is40 solved with an artificial structural damping g added to the stiffness,41 det[K(1 + i g) - lambda E(k)] = 0, for real lambda = omega^2 and real42 g. g < 0 means the aerodynamic damping stabilizes the mode (negative43 artificial damping would be needed to sustain harmonic motion), g = 044 is the neutral condition, and g > 0 means the mode is unstable. The45 flutter speed is the lowest airspeed where a mode's g rises through46 zero as V increases. This is a simple p-k style eigenvalue approach on47 the 2 x 2 aeroelastic system, a first-estimate typical section model,48 not a production flutter clearance tool.49- Flutter boundary: the flutter speed grows with the structural50 stiffness (a stiff section flutters at much higher speed, and the51 rigid limit is enormous), depends on the inertia coupling x_theta (no52 static unbalance leaves no classical flutter mechanism), on the53 frequency ratio omega_h / omega_theta, on the elastic axis location a,54 and on the aerodynamic stiffness (the circulatory V^2 terms that also55 drive static divergence).56- Frequency coalescence: in the classical mechanism the two modal57 frequencies converge strongly as the airspeed approaches the flutter58 boundary; the coalescence check reports the minimum frequency gap and59 the speed where it occurs, and the exact branch merge sits at or just60 above the flutter speed.61- Divergence versus flutter: flutter is the dynamic bending-torsion62 oscillation that loses stability at the damping crossing; divergence63 is the static torsional instability where the torsion stiffness64 vanishes at a higher dynamic pressure. For the typical section the65 torsion frequency collapses to zero at the divergence speed; static66 divergence analysis belongs to67 aerodynamics/aeroelasticity/divergence-speed.68- Flutter margin and clearance: margin = V_F / V_D against the design69 dive speed; clearance practice keeps the margin at or above 1.15 x70 V_D. FAR 25.629 (and the European counterpart CS 25.629) is the71 airworthiness context for transport category flutter clearance; the72 standards are referenced by name only, never reproduced73 (standards-map.yaml far-25 and cs-25, both reference-only).7475## Workflow76771. Gather the section inputs: mass ratio mu, static unbalance x_theta,78 radius of gyration squared r_theta^2, uncoupled frequencies omega_h79 and omega_theta, elastic axis location a, semi-chord b, and the80 flight density rho (the ISA sea level default 1.225 kg/m^3).812. Confirm the inertia coupling: x_theta must be non-negative (center82 of gravity aft of the elastic axis); without it there is no classical83 flutter mechanism.843. Sweep the reduced frequency with vg_damping_crossing over a range85 such as k in [0.05, 4] and inspect the per-mode rows (airspeed,86 frequency, g): both modes must be damped (g < 0) at the low-speed87 end, and the flutter branch must rise through g = 0 as the airspeed88 grows.894. Locate the flutter speed with flutter_speed_binary, which bisects on90 the g = 0 crossing and returns the flutter speed, the flutter91 frequency, the reduced frequency, and the other mode's frequency at92 the flutter point. A None result means no crossing inside the scanned93 reduced frequency range.945. Check the mechanism with frequency_coalescence_check: the modal95 frequency gap should shrink well below its low-speed value near the96 flutter boundary (coalescing True), confirming the classical97 frequency-coalescence flutter mechanism.986. Assess the clearance with flutter_margin(v_f, v_design): a margin at99 or above the 1.15 clearance practice (FAR 25.629 context) is100 acceptable; below it the section needs stiffness or damping changes,101 and the analysis is re-run from step 3.1027. Confirm the deterministic behavior with the contract test103 scripts/test_flutter_speed_prediction.py.104105## Worked example106107Classic typical section benchmark: b = 1 m semi-chord, elastic axis at108a = -0.2 (40 percent chord), center of gravity 0.2 m aft of the elastic109axis (x_theta = 0.2), r_theta^2 = 0.24, mu = 20, omega_h = 30 rad/s,110omega_theta = 50 rad/s, sea level air (rho = 1.225 kg/m^3).111112- V-g sweep: at k = 4 (about 14 m/s) both modes are damped, g = -0.011113 for the torsion branch and g = -0.017 for the bending branch; the114 torsion branch rises through g = 0 between k = 0.5 (g = -0.025, about115 85.6 m/s) and k = 0.46 (g = +0.002, about 89.1 m/s).116- flutter_speed_binary gives the flutter point where the damping crosses117 zero: V_F = 88.85 m/s at reduced frequency k_F = 0.462, flutter118 frequency omega_F = 41.07 rad/s, with the bending branch at 30.10119 rad/s. Normalized: V_F / (b * omega_theta) = 1.78 and omega_F /120 omega_theta = 0.82, the classic typical section result.121- frequency_coalescence_check: the modal frequency gap shrinks from 27.7122 rad/s at low speed to 8.0 rad/s at the coalescence station (about 94123 m/s, 30.7 rad/s), a 71 percent convergence: coalescing True, the124 classical mechanism.125- flutter_margin: with a design dive speed V_D = 80 m/s the margin is126 88.85 / 80 = 1.111, below the 1.15 clearance practice, so the section127 is flagged at flutter risk; with V_D = 70 m/s the margin is 1.269 and128 the clearance closes.129- Divergence context: the torsion frequency collapses to zero at the130 static divergence speed of about 141 m/s, above the flutter speed, so131 flutter is the critical instability for this section.132133## Related leaves134135- aerodynamics/aeroelasticity/divergence-speed: the static counterpart136 (divergence dynamic pressure, divergence speed, and divergence margin137 for the same typical section geometry).138- aerodynamics/high-speed/swept-wing-aerodynamics: spanwise sweep139 couples bending and torsion through the flow and shifts the flutter140 boundary of the wing.141- structures/fem/modal-analysis: structural mode shapes and frequencies142 that feed multi-mode flutter analyses beyond the two-DOF typical143 section.144145## Pitfalls146147- Using quasi-steady aerodynamics (C = 1) for the damping search: it is148 documented to give erroneous pitch damping, so the flutter crossing is149 computed with the full Theodorsen C(k) - do not shortcut the150 deficiency function.151- Reading a mode as stable because g is negative at one speed: the V-g152 sweep must show both modes damped at the low-speed end and the153 torsion branch rising through g = 0 as airspeed grows; a single point154 is not a stability verdict.155- Treating a None flutter speed as "no flutter": flutter_speed_binary156 returns None when no g = 0 crossing exists inside the scanned reduced157 frequency range - widen the k sweep before concluding the section is158 flutter-free.159- Neglecting the static-unbalance requirement: with x_theta = 0 there is160 no inertia coupling and no classical flutter mechanism, so a161 zero-unbalance section must not be pushed through the binary search162 as if it could flutter; a negative x_theta (elastic axis aft of the163 center of gravity) is rejected because the mechanism assumption164 breaks.165- Clearing against the margin without checking the mechanism: the166 frequency_coalescence_check verdict (gap shrinking from 27.7 to 8.0167 rad/s in the benchmark) confirms the coalescence mechanism - a168 clearance margin alone does not prove the flutter boundary was found.169- Forgetting that flutter and divergence are different instabilities:170 the torsion frequency collapsing to zero at about 141 m/s is static171 divergence (divergence-speed leaf), not the 88.85 m/s flutter172 crossing this leaf locates.173174## Behavior contract (gate 3)175176Run the deterministic contract test (stdlib unittest, offline):177178 python3 scripts/test_flutter_speed_prediction.py179180The test covers the Bessel reference values, the published C(k) values181and limits, low-speed stability (negative g), the torsion damping182crossing, the benchmark flutter speed and its normalized classic values,183the no-crossing-within-range and rigid edge cases, the coalescence184verdict, the flutter margin verdicts, and invalid-input edge cases.185186## Compliance187188- The typical section flutter analysis is public-domain textbook189 methodology (Theodorsen 1935, NACA Report 496; Bisplinghoff, Ashley190 and Halfman, Aeroelasticity; Hodges and Pierce, Introduction to191 Structural Dynamics and Aeroelasticity); the airworthiness context is192 FAR 25.629 and CS 25.629, referenced by name only, summary-only per193 standards-map.yaml (both reference-only).194- compliance: STANDARDS-REF, gated: false.