Rotorcraft Blade Flapping Dynamics (flight-mechanics/performance/rotorcraft-blade-flapping-dynamics)
Use when the task is the basic blade-flapping dynamics of a helicopter
main rotor: the Lock number that fixes the ratio of aerodynamic flap
moment to centrifugal restoring moment, the steady hover coning angle
of an untwisted centrally hinged blade under uniform inflow, and the
rotating flap natural frequency ratio for a flap hinge offset. This
leaf implements the classical articulated-rotor flap model (Johnson,
Helicopter Theory ch.4 and Leishman, Principles of Helicopter
Aerodynamics ch.4, paraphrased, never reproduced) in pure Python,
stdlib only, deterministic. It is the first blade-dynamics leaf in the
rotorcraft subdomain: the momentum-theory POWER leaves
(rotorcraft-hover-performance and siblings) own hover power, induced
velocity and figure of merit, while this leaf owns flap motion only.
Flap dynamics here covers coning and frequency ratio, not ground
resonance or lag dynamics.
Domain quick reference
- Lock number: gamma = rho * a * c * R^4 / I_beta, where rho is the
air density, a the section lift-curve slope (typical 5.73 /rad), c
the blade chord, R the rotor radius and I_beta the blade flap moment
of inertia. The Lock number is the ratio of the aerodynamic flap
moment to the centrifugal restoring moment; published rotor values
fall in the 5-12 band.
- Uniform-blade flap inertia: I_beta = m_b * R^2 / 3 for a blade of
mass m_b flapping about the rotation axis.
- Hover coning angle: a0 = 0.5 * gamma * (theta0 / 4 - lambda / 3)
rad, from the steady flap-moment balance. The aerodynamic flap
moment 0.5 * rho * a * c * Omega^2 * R^4 * (theta0/4 - lambda/3)
equals the centrifugal restoring moment I_beta * Omega^2 * a0 for an
untwisted centrally hinged blade with uniform inflow, where theta0
is the collective pitch and lambda the uniform inflow ratio. Hover
coning is typically 3-8 deg.
- Rotating flap frequency ratio: nu = sqrt(1 + 1.5 * e / (1 - e)),
with e the flap hinge offset as a fraction of rotor radius. This is
algebraically identical to nu^2 = (1 - 3e/2 + e^3/2) / (1 - e)^3 for
a uniform blade. The central hinge limit e = 0 gives exactly 1.0
(1/rev); articulated flap frequencies run about 1.02-1.08 per rev.
- Flap frequency per revolution: because the flapping natural
frequency scales with rotor speed, the ratio nu already expresses
the frequency in units of rotor revolutions and no rotor speed input
is required.
- Units are SI throughout: kg, m, rad, /rad, dimensionless ratios.
- FAR-29 frames the transport-category rotorcraft certification
context for rotor loads; the relations above are standard
engineering methodology, summary-only.
Workflow
- Fix the blade geometry and operating point: blade mass m_b, radius
R, chord c, collective theta0, uniform inflow ratio lambda, hinge
offset fraction e, and optionally rho and the lift-curve slope a.
- Get the flap inertia with blade_flap_inertia_uniform (uniform blade
about the rotation axis); the module order is mass, radius, chord,
theta0, lambda, e, then the optional lift_slope and rho defaults.
- Compute the Lock number with lock_number from rho, a, c, R and
I_beta, and sanity check it against the published 5-12 band.
- Compute the hover coning with hover_coning_angle(gamma, theta0,
lambda); a0 near zero means collective and inflow nearly balance.
- Compute the flap frequency with flap_frequency_ratio(e); e = 0 is
the central hinge 1/rev limit, larger offsets stiffen the blade.
- Run blade_flapping_summary for the one-call assessment dict with
all six documented keys (lock_number, flap_inertia_kg_m2,
coning_angle_rad, coning_angle_deg, flap_frequency_ratio,
flap_frequency_per_rev).
- Confirm the deterministic checks with the contract test
scripts/test_rotorcraft_blade_flapping_dynamics.py.
Worked example
A typical light-to-medium helicopter blade: rho = 1.225 kg/m3, a =
5.73 /rad, chord c = 0.50 m, radius R = 6.0 m, blade mass m_b = 50 kg
(I_beta = 600 kg m2), collective theta0 = 0.170 rad, uniform inflow
ratio lambda = 0.050, hinge offset e = 0.05. Real module outputs:
- blade_flap_inertia_uniform(50, 6.0) = 600.0 kg m2 exactly
(50 * 36 / 3).
- lock_number(1.225, 5.73, 0.5, 6.0, 600.0) = 7.58079, inside the
published 6-10 rotor band (hand check 1.225 * 5.73 * 0.5 * 1296 /
600 = 7.58079).
- hover_coning_angle(7.58079, 0.170, 0.050) = 0.09792 rad =
5.61032 deg, inside the published 3-8 deg hover coning band.
- flap_frequency_ratio(0.05) = 1.03872, inside the published
1.02-1.08 per rev articulated flap band.
- blade_flapping_summary(50, 6.0, 0.50, 0.170, 0.050, 0.05) returns
lock_number 7.58079, flap_inertia_kg_m2 600.0, coning_angle_rad
0.09792, coning_angle_deg 5.61032, flap_frequency_ratio 1.03872 and
flap_frequency_per_rev 1.03872.
Verification
- Confirm blade_flap_inertia_uniform(50, 6.0) returns 600.0 exactly.
- Confirm lock_number(1.225, 5.73, 0.5, 6.0, 600.0) returns 7.58079
and falls in the 6-10 band.
- Confirm hover_coning_angle(7.58079, 0.170, 0.050) returns about
0.09792 rad and 5.61 deg, inside 3-8 deg.
- Confirm the coning limiting behaviour: theta0/4 equal to lambda/3
gives a0 = 0.0, higher collective raises a0, higher inflow lowers it.
- Confirm flap_frequency_ratio(0.0) equals exactly 1.0, e = 0.05 gives
about 1.0387, and e = 0.5 gives sqrt(2.5) = 1.5811; larger offsets
always raise nu.
- Confirm the summary dict contains exactly the six documented keys and
that flap_frequency_per_rev equals flap_frequency_ratio.
- Confirm ValueError rejection of non-positive mass, radius, chord,
lift slope, density, inertia and gamma, of negative collective or
inflow ratio, and of hinge offset below 0 or at or above 1.
- Run the contract test offline: python3
scripts/test_rotorcraft_blade_flapping_dynamics.py (34 tests,
deterministic, no network).
Pitfalls
- Using a non-uniform flap inertia without saying so:
blade_flap_inertia_uniform assumes I_beta = m_b*R^2/3 about the rotation
axis; the Lock number (and coning) is only as good as the inertia input.
- Sanity-checking the Lock number against the wrong band: published rotor
values run 5-12 (the worked example lands at 7.58); treat the band as a
plausibility check, not a pass/fail gate.
- Expecting coning sign intuition to hold: a0 = 0.5gamma(theta0/4 -
lambda/3), so higher inflow lowers coning and theta0/4 = lambda/3 gives
exactly zero; a 'negative coning' reading means collective and inflow are
out of balance, not a sign error in the formula.
- Passing hinge offset e at or above 1 (or negative): flap_frequency_ratio
raises ValueError there; e = 0 is the exact central-hinge 1/rev limit and
larger offsets stiffen the blade.
- Forgetting the units convention: SI throughout (kg, m, rad) with gamma
dimensionless; a negative collective or inflow ratio raises ValueError,
and coning_angle_deg is the only degree output.
Related leaves
- flight-mechanics/performance/rotorcraft-hover-performance: the
momentum-theory hover power leaf; its blade geometry inputs (radius,
chord, solidity) are shared with this leaf.
- flight-mechanics/performance/rotorcraft-tail-rotor-sizing: tail
rotor anti-torque sizing, the power-side complement to main rotor
dynamics.
- flight-mechanics/stability-control/spin-recovery: fixed-wing
autorotation of a stalled wing is a different topic from rotor blade
flapping and lives in the fixed-wing stability leaves.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_rotorcraft_blade_flapping_dynamics.py
The test covers the worked example magnitude bounds (Lock number 6-10
about 7.58, coning about 0.0979 rad = 5.61 deg inside 3-8 deg, flap
frequency ratio about 1.0387 inside 1.02-1.08 per rev), the exact
uniform-blade inertia value, the flap-moment balance zero, monotonic
coning responses, the closed-form flap frequency identities including
the exact central hinge limit, scaling relations, ValueError rejection
of every non-physical input, and run-to-run determinism.
Compliance
- Standards referenced, not reproduced: FAR-29 is the FAA
transport-category rotorcraft airworthiness standard (ecfr.gov); the
flap relations above are standard engineering methodology
(Johnson, Leishman), summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: rotorcraft-blade-flapping-dynamics3description: Use when you must compute the blade-flapping dynamics of a helicopter main rotor: the blade Lock number from the air density, the section lift-curve slope, the blade chord, the rotor radius and the blade flap moment of inertia, the steady hover coning angle from the Lock number, the collective pitch and the uniform inflow ratio, and the rotating flap natural frequency ratio for a flap hinge offset. Produces the Lock number, the coning angle in radians and degrees and the flap frequency ratio per revolution that gate a rotor-dynamics assessment. Trigger: rotorcraft blade flapping, Lock number, coning angle, flap frequency ratio, rotor dynamics, hinge offset, helicopter main rotor, articulated blade.4license: Apache-2.05---67# Rotorcraft Blade Flapping Dynamics (flight-mechanics/performance/rotorcraft-blade-flapping-dynamics)89Use when the task is the basic blade-flapping dynamics of a helicopter10main rotor: the Lock number that fixes the ratio of aerodynamic flap11moment to centrifugal restoring moment, the steady hover coning angle12of an untwisted centrally hinged blade under uniform inflow, and the13rotating flap natural frequency ratio for a flap hinge offset. This14leaf implements the classical articulated-rotor flap model (Johnson,15Helicopter Theory ch.4 and Leishman, Principles of Helicopter16Aerodynamics ch.4, paraphrased, never reproduced) in pure Python,17stdlib only, deterministic. It is the first blade-dynamics leaf in the18rotorcraft subdomain: the momentum-theory POWER leaves19(rotorcraft-hover-performance and siblings) own hover power, induced20velocity and figure of merit, while this leaf owns flap motion only.21Flap dynamics here covers coning and frequency ratio, not ground22resonance or lag dynamics.2324## Domain quick reference2526- Lock number: gamma = rho * a * c * R^4 / I_beta, where rho is the27 air density, a the section lift-curve slope (typical 5.73 /rad), c28 the blade chord, R the rotor radius and I_beta the blade flap moment29 of inertia. The Lock number is the ratio of the aerodynamic flap30 moment to the centrifugal restoring moment; published rotor values31 fall in the 5-12 band.32- Uniform-blade flap inertia: I_beta = m_b * R^2 / 3 for a blade of33 mass m_b flapping about the rotation axis.34- Hover coning angle: a0 = 0.5 * gamma * (theta0 / 4 - lambda / 3)35 rad, from the steady flap-moment balance. The aerodynamic flap36 moment 0.5 * rho * a * c * Omega^2 * R^4 * (theta0/4 - lambda/3)37 equals the centrifugal restoring moment I_beta * Omega^2 * a0 for an38 untwisted centrally hinged blade with uniform inflow, where theta039 is the collective pitch and lambda the uniform inflow ratio. Hover40 coning is typically 3-8 deg.41- Rotating flap frequency ratio: nu = sqrt(1 + 1.5 * e / (1 - e)),42 with e the flap hinge offset as a fraction of rotor radius. This is43 algebraically identical to nu^2 = (1 - 3e/2 + e^3/2) / (1 - e)^3 for44 a uniform blade. The central hinge limit e = 0 gives exactly 1.045 (1/rev); articulated flap frequencies run about 1.02-1.08 per rev.46- Flap frequency per revolution: because the flapping natural47 frequency scales with rotor speed, the ratio nu already expresses48 the frequency in units of rotor revolutions and no rotor speed input49 is required.50- Units are SI throughout: kg, m, rad, /rad, dimensionless ratios.51- FAR-29 frames the transport-category rotorcraft certification52 context for rotor loads; the relations above are standard53 engineering methodology, summary-only.5455## Workflow56571. Fix the blade geometry and operating point: blade mass m_b, radius58 R, chord c, collective theta0, uniform inflow ratio lambda, hinge59 offset fraction e, and optionally rho and the lift-curve slope a.602. Get the flap inertia with blade_flap_inertia_uniform (uniform blade61 about the rotation axis); the module order is mass, radius, chord,62 theta0, lambda, e, then the optional lift_slope and rho defaults.633. Compute the Lock number with lock_number from rho, a, c, R and64 I_beta, and sanity check it against the published 5-12 band.654. Compute the hover coning with hover_coning_angle(gamma, theta0,66 lambda); a0 near zero means collective and inflow nearly balance.675. Compute the flap frequency with flap_frequency_ratio(e); e = 0 is68 the central hinge 1/rev limit, larger offsets stiffen the blade.696. Run blade_flapping_summary for the one-call assessment dict with70 all six documented keys (lock_number, flap_inertia_kg_m2,71 coning_angle_rad, coning_angle_deg, flap_frequency_ratio,72 flap_frequency_per_rev).737. Confirm the deterministic checks with the contract test74 scripts/test_rotorcraft_blade_flapping_dynamics.py.7576## Worked example7778A typical light-to-medium helicopter blade: rho = 1.225 kg/m3, a =795.73 /rad, chord c = 0.50 m, radius R = 6.0 m, blade mass m_b = 50 kg80(I_beta = 600 kg m2), collective theta0 = 0.170 rad, uniform inflow81ratio lambda = 0.050, hinge offset e = 0.05. Real module outputs:8283- blade_flap_inertia_uniform(50, 6.0) = 600.0 kg m2 exactly84 (50 * 36 / 3).85- lock_number(1.225, 5.73, 0.5, 6.0, 600.0) = 7.58079, inside the86 published 6-10 rotor band (hand check 1.225 * 5.73 * 0.5 * 1296 /87 600 = 7.58079).88- hover_coning_angle(7.58079, 0.170, 0.050) = 0.09792 rad =89 5.61032 deg, inside the published 3-8 deg hover coning band.90- flap_frequency_ratio(0.05) = 1.03872, inside the published91 1.02-1.08 per rev articulated flap band.92- blade_flapping_summary(50, 6.0, 0.50, 0.170, 0.050, 0.05) returns93 lock_number 7.58079, flap_inertia_kg_m2 600.0, coning_angle_rad94 0.09792, coning_angle_deg 5.61032, flap_frequency_ratio 1.03872 and95 flap_frequency_per_rev 1.03872.9697## Verification9899- Confirm blade_flap_inertia_uniform(50, 6.0) returns 600.0 exactly.100- Confirm lock_number(1.225, 5.73, 0.5, 6.0, 600.0) returns 7.58079101 and falls in the 6-10 band.102- Confirm hover_coning_angle(7.58079, 0.170, 0.050) returns about103 0.09792 rad and 5.61 deg, inside 3-8 deg.104- Confirm the coning limiting behaviour: theta0/4 equal to lambda/3105 gives a0 = 0.0, higher collective raises a0, higher inflow lowers it.106- Confirm flap_frequency_ratio(0.0) equals exactly 1.0, e = 0.05 gives107 about 1.0387, and e = 0.5 gives sqrt(2.5) = 1.5811; larger offsets108 always raise nu.109- Confirm the summary dict contains exactly the six documented keys and110 that flap_frequency_per_rev equals flap_frequency_ratio.111- Confirm ValueError rejection of non-positive mass, radius, chord,112 lift slope, density, inertia and gamma, of negative collective or113 inflow ratio, and of hinge offset below 0 or at or above 1.114- Run the contract test offline: python3115 scripts/test_rotorcraft_blade_flapping_dynamics.py (34 tests,116 deterministic, no network).117118## Pitfalls119120- Using a non-uniform flap inertia without saying so:121 blade_flap_inertia_uniform assumes I_beta = m_b*R^2/3 about the rotation122 axis; the Lock number (and coning) is only as good as the inertia input.123- Sanity-checking the Lock number against the wrong band: published rotor124 values run 5-12 (the worked example lands at 7.58); treat the band as a125 plausibility check, not a pass/fail gate.126- Expecting coning sign intuition to hold: a0 = 0.5*gamma*(theta0/4 -127 lambda/3), so higher inflow lowers coning and theta0/4 = lambda/3 gives128 exactly zero; a 'negative coning' reading means collective and inflow are129 out of balance, not a sign error in the formula.130- Passing hinge offset e at or above 1 (or negative): flap_frequency_ratio131 raises ValueError there; e = 0 is the exact central-hinge 1/rev limit and132 larger offsets stiffen the blade.133- Forgetting the units convention: SI throughout (kg, m, rad) with gamma134 dimensionless; a negative collective or inflow ratio raises ValueError,135 and coning_angle_deg is the only degree output.136137## Related leaves138139- flight-mechanics/performance/rotorcraft-hover-performance: the140 momentum-theory hover power leaf; its blade geometry inputs (radius,141 chord, solidity) are shared with this leaf.142- flight-mechanics/performance/rotorcraft-tail-rotor-sizing: tail143 rotor anti-torque sizing, the power-side complement to main rotor144 dynamics.145- flight-mechanics/stability-control/spin-recovery: fixed-wing146 autorotation of a stalled wing is a different topic from rotor blade147 flapping and lives in the fixed-wing stability leaves.148149## Behavior contract (gate 3)150151Run the deterministic contract test (stdlib unittest, offline):152153 python3 scripts/test_rotorcraft_blade_flapping_dynamics.py154155The test covers the worked example magnitude bounds (Lock number 6-10156about 7.58, coning about 0.0979 rad = 5.61 deg inside 3-8 deg, flap157frequency ratio about 1.0387 inside 1.02-1.08 per rev), the exact158uniform-blade inertia value, the flap-moment balance zero, monotonic159coning responses, the closed-form flap frequency identities including160the exact central hinge limit, scaling relations, ValueError rejection161of every non-physical input, and run-to-run determinism.162163## Compliance164165- Standards referenced, not reproduced: FAR-29 is the FAA166 transport-category rotorcraft airworthiness standard (ecfr.gov); the167 flap relations above are standard engineering methodology168 (Johnson, Leishman), summary-only per standards-map.yaml.169- compliance: STANDARDS-REF, gated: false.