Rotorcraft Lead-Lag Dynamics (flight-mechanics/performance/rotorcraft-lead-lag-dynamics)
Use when the task is the lead-lag dynamics of a helicopter main rotor: the rotating lead-lag (in-plane) frequency ratio of an idealized uniform blade from its lag-hinge offset, the fixed-frame multiblade lag mode frequencies for a rotor with three or more blades, and the rotor speed at which the regressing lag mode coincides with the airframe lateral frequency (Coleman-diagram coincidence), returning a ground-resonance clearance verdict against the operating rotor speed. This leaf implements the deterministic frequency-coincidence and clearance layer in pure Python, stdlib only, deterministic: damping and coupled eigenvalue stability analysis are out of scope, and blade flapping motion, coning and the rotating flap natural frequency belong to the flap-dynamics sibling. The momentum-theory hover leaves own rotor power and inflow.
Domain quick reference
- Rotating lead-lag frequency ratio: nu = sqrt(1.5 * e / (1 - e)), with e the lag-hinge offset as a fraction of rotor radius, idealized uniform blade, centrifugal-potential derivation (the in-plane analog of the flap frequency formula). At e = 0 the rotating lag frequency is exactly zero, because lag has no 1/rev term (unlike flap, where nu = 1 at e = 0). Published articulated lag frequencies run about 0.2-0.4 per rev; e = 0.5 gives sqrt(1.5) = 1.2247.
- Fixed-frame multiblade modes (3+ bladed rotor): the per-blade lag motion at nu per rev maps to collective, regressing and advancing fixed-frame modes with frequencies nu*Omega, |1 - nu|*Omega and (1 + nu)*Omega respectively, where Omega is the rotor speed in rad/s and the factor converts per-rev to Hz via /2pi.
- Regressing lag mode: the fixed-frame mode that sweeps downward through the airframe frequencies as the rotor slows, which makes ground resonance a low-rotor-speed phenomenon.
- Coincidence rotor speed: Omega* = 2piomega_F / |1 - nu| in rad/s, the rotor speed at which the regressing lag mode frequency equals the airframe lateral frequency omega_F in Hz. Stiff-inplane designs push nu above 1 so the coincidence sits far from the operating speed.
- Clearance verdict: with clearance_fraction = (Omega* - Omega_op) / Omega_op, the operating point is "clear" when |clearance_fraction| is more than the margin (default 0.20) from the operating speed, else "resonance-adjacent".
- Units are SI throughout: Hz, rad/s, dimensionless ratios and fractions.
- FAR-29 frames the transport-category rotorcraft certification context; the relations above are standard engineering methodology, summary-only.
Workflow
- Fix the rotor inputs: the lag-hinge offset fraction e (typical articulated 0.02-0.05) or a measured or design lag frequency ratio nu, the operating rotor speed Omega in rad/s, and the airframe lateral natural frequency in Hz.
- Get the lag frequency ratio with lag_frequency_ratio_hinge_offset(e); e = 0 is the exact zero limit, larger offsets stiffen the blade in plane. Skip this step when nu is the direct input.
- Compute the three fixed-frame mode frequencies with fixed_frame_lag_modes(nu, Omega): collective, regressing and advancing in Hz, and confirm the regressing mode with regressing_lag_frequency(nu, Omega).
- Compute the coincidence rotor speed with coincidence_rotor_speed(nu, airframe_frequency_hz): the Coleman-diagram crossing where the regressing mode meets the airframe lateral mode.
- Judge the operating point with ground_resonance_clearance(nu, Omega, airframe_frequency_hz, margin): resonance-adjacent when the coincidence sits within margin of the operating speed, else clear.
- Run lead_lag_summary(e_or_nu, Omega, airframe_frequency_hz) for the one-call assessment dict with all eight documented keys (lag_frequency_ratio, collective_hz, regressing_hz, advancing_hz, coincidence_omega, operating_omega, clearance_fraction, verdict). Input convention: a first argument below 1 is the hinge offset fraction e and is converted by the formula; a value of 1 or more is taken as nu directly, matching design practice where stiff-inplane rotors are specified by a measured nu at or above 1/rev.
- Confirm the deterministic checks with the contract test scripts/test_rotorcraft_lead_lag_dynamics.py.
Worked example
Typical articulated rotor: lag-hinge offset e = 0.05, operating rotor speed Omega = 44 rad/s, airframe lateral natural frequency 5.0 Hz. Real module outputs:
- lag_frequency_ratio_hinge_offset(0.05) = 0.28098, inside the published 0.2-0.4 per rev articulated lag band.
- fixed_frame_lag_modes(0.28098, 44): collective 1.96762 Hz, regressing 5.03520 Hz (0.719/rev), advancing 8.97044 Hz.
- coincidence_rotor_speed(0.28098, 5.0) = 43.69244 rad/s, about 0.7% below the operating 44 rad/s.
- ground_resonance_clearance(0.28098, 44, 5.0) returns clearance_fraction -0.00699 and verdict resonance-adjacent, the classic ground-resonance exposure for a typical articulated rotor at operating speed.
- With a separated airframe frequency of 3.5 Hz, coincidence_rotor_speed(0.28098, 3.5) = 30.58471 rad/s (about 30.5% below operating), clearance_fraction -0.30489 and verdict clear.
- lead_lag_summary(0.05, 44, 5.0) returns the eight-key dict above with lag_frequency_ratio 0.28098, regressing_hz 5.03520, coincidence_omega 43.69244 and verdict resonance-adjacent.
Verification
- Confirm lag_frequency_ratio_hinge_offset(0.05) returns about 0.2810 in the 0.2-0.4 band, e = 0 returns exactly 0.0, larger e always raises nu, and e = 0.5 returns sqrt(1.5) = 1.2247.
- Confirm the fixed-frame identities: regressing_hz = |1 - nu|*Omega/2pi, advancing_hz = (1 + nu)*Omega/2pi, and the regressing mode falls while the advancing mode rises as nu increases.
- Confirm coincidence_rotor_speed(0.28098, 5.0) about 43.69 rad/s and the resonance-adjacent verdict at operating 44 rad/s; the 3.5 Hz airframe case is clear; the margin parameter moves the verdict boundary.
- Confirm the summary dict contains exactly the eight documented keys and that its values match the component functions for the same inputs.
- Confirm ValueError rejection of hinge offset below 0 or at or above 1, nu below 0, rotor speed at or below 0, airframe frequency at or below 0, the |1 - nu| = 0 coincidence guard, and a negative margin.
- Run the contract test offline: python3 scripts/test_rotorcraft_lead_lag_dynamics.py (30 tests, deterministic, no network).
Pitfalls
- Reusing the flap formula for lag: at e = 0 the lag frequency is exactly zero (no 1/rev term), unlike flap where nu = 1; the lag ratio is sqrt(1.5*e/(1 - e)).
- Passing a measured articulated nu as the first summary argument: lead_lag_summary treats any first argument below 1 as the hinge offset e and converts it, so a direct nu of 0.28 (articulated band) would be misread as e = 0.28; pass values >= 1 only when they are true nu values (stiff-inplane practice).
- Forgetting the |1 - nu| = 0 guard: a lag ratio of exactly 1/rev puts the regressing mode at zero frequency and coincidence_rotor_speed raises ValueError on the division.
- Reading resonance-adjacent without the margin: the verdict uses a default margin of 0.20 on the clearance fraction; the worked articulated rotor at 44 rad/s with a 5.0 Hz airframe sits about 0.7% from coincidence and is correctly resonance-adjacent, while the 3.5 Hz case (about 30% away) is clear.
- Negative margin, hinge offset outside [0, 1), rotor speed or airframe frequency at or below 0 raise ValueError.
Related leaves
- flight-mechanics/performance/rotorcraft-blade-flapping-dynamics: the flap-dynamics sibling, which owns blade flapping, coning and the rotating flap natural frequency from its hinge offset; the lead-lag nu formula here is this leaf's own.
- flight-mechanics/performance/rotorcraft-blade-element-hover-performance: blade-element hover thrust and torque from the same rotor geometry inputs, on the power side of the rotorcraft family.
- flight-mechanics/stability-control/spin-recovery: fixed-wing autorotation of a stalled wing is a different topic and lives in the fixed-wing stability leaves.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_rotorcraft_lead_lag_dynamics.py
The test covers the worked example magnitude bounds (lag frequency ratio about 0.2810 in the 0.2-0.4 per rev band, modes at 44 rad/s about 1.968 / 5.035 / 8.970 Hz, coincidence about 43.69 rad/s for the 5.0 Hz airframe and about 30.58 rad/s for 3.5 Hz), the exact zero-offset limit, the sqrt(1.5) closed form at e = 0.5, the multiblade closed-form identities and trends, coincidence closed form and scaling, margin boundary behavior, the summary input convention, ValueError rejection of every non-physical input including the |1 - nu| = 0 guard, and run-to-run determinism.
Compliance
- Standards referenced, not reproduced: FAR-29 is the FAA transport-category rotorcraft airworthiness standard (ecfr.gov); the lead-lag relations above are standard engineering methodology (Johnson, Leishman), summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.