Minimum Control Speed Vmc (flight-test-operations/envelope/vmc-determination)
Use when the task is the Vmc prediction and demonstration check for a
multi-engine airplane in the spirit of the FAR/CS 25.149
minimum-control-speed method, summary-only. This leaf identifies the
critical engine from the engine-out yawing-moment geometry, builds the
asymmetric yawing moment (operating-engine thrust at the failed-engine
lateral arm plus the failed-engine windmilling drag contribution),
computes the rudder deflection required to balance it at each airspeed,
solves the authority-limited speed where the required deflection
reaches the rudder limit, evaluates the rudder pedal-force criterion at
that speed with the boost factor, applies the stall-protection guard on
the reference stall speed, and returns the predicted Vmc with the
governing-limit label and the flight-test go verdict. Model
simplifications: first-order yaw balance without sideslip coupling,
sea-level density for the dynamic pressure, operating engines at
maximum takeoff thrust. It pairs with flight-test-operations v-speeds
(Vmc sits beside the V-speed set), flight-mechanics oei-climb-gradient
(the engine-out performance sibling), and vehicle-design
control-surface-sizing (the rudder sizing sibling).
Domain quick reference
- Critical engine: the engine whose failure gives the largest adverse
yawing moment, ranked by the |thrust * y_m| product of its lateral
arm about the CG; ties resolve to the lower index.
- Asymmetric yawing moment: N_asym = T_op * y_fail + 0.5 * RHO_SL *
V^2 * S_f * Cd * y_fail, where T_op is the sum of the operating
(non-failed) engine thrusts and y_fail the signed lateral arm of the
failed engine.
- Rudder deflection required: delta = |N_asym| / (q * S_v * l_v *
C_Lv_delta_r), with q = 0.5 * RHO_SL * V^2, S_v the fin area, l_v the
CG-to-fin arm and C_Lv_delta_r the effective fin lift slope per
rudder deflection (includes the rudder-to-fin area ratio).
- Rudder-authority limit: the speed where delta reaches delta_r_max.
Closed form q* = T_op * |y_fail| / (S_v * l_v * C_Lv_delta_r *
delta_r_max_rad - S_f * Cd * |y_fail|); V_auth = sqrt(2 * q* /
RHO_SL). If the denominator is not positive the configuration is
never authority limited (V_auth = None).
- Rudder pedal force: F = q * S_r * c_r * |C_h_delta_r| *
min(delta_req, delta_r_max_rad) * boost_factor / pedal_arm_m, with
C_h_delta_r the hinge moment coefficient per radian (magnitude used,
negative for a restoring hinge), S_r and c_r the rudder area and
chord, and the boost factor scaling felt force (1.0 manual, smaller
for power-boosted systems).
- Pedal-force limit: F_lim = 667 N (150 lbf criterion of the test
condition, paraphrased). The force-limited speed V_force follows from
the quadratic F(V) at the deflection limit, V_force = sqrt(2 * q_F /
RHO_SL).
- Vmc: vmc = max(V_auth, V_force); the governing limit label is
"rudder-authority" when V_auth >= V_force else "pedal-force".
- Stall guard: stall_guard_speed = stall_guard * v_s1g (default guard
factor 1.05). When vmc falls below it the flight test must
demonstrate above the guard; vmc is reported unchanged with the
guard_verdict "stall-guard-governs".
- Units are SI: N, m, m/s, rad, deg, N m; knots = m/s * 1.94384.
- FAR/CS 25.149 frames the minimum-control-speed test condition; the
relations above are standard engineering methodology, summary-only.
Workflow
- Collect the engine layout: engines as a list of {thrust_N, y_m}
dicts (y_m positive on the right), the failed engine index, and the
failed-engine windmilling drag area S_f * Cd at speed.
- Confirm the critical engine with critical_engine_index; the failed
engine is usually the critical one (the leaf reports whichever index
is given).
- Build the geometry set: S_v, l_v, C_Lv_delta_r, delta_r_max, S_r,
c_r, C_h_delta_r, pedal arm, boost factor, v_s1g, and the pedal
force limit and stall guard defaults.
- Compute the authority-limited speed with authority_limited_speed and
the force-limited speed from the pedal-force quadratic (inside
vmc_predict as v_force_m_s).
- Run the full prediction with vmc_predict and read vmc_m_s, vmc_kt,
governing, force_at_vmc_N, force_ok, guard_verdict and
flight_test_go.
- Inspect the asymmetric moment model at Vmc with
asymmetric_yaw_moment_Nm for the moment value carried by the
rudder.
- If force_ok is False or guard_verdict is "stall-guard-governs", the
engine-inoperative flight test cannot clear the Vmc demonstration as
configured; revisit the boost factor or the demonstration speed.
- Confirm the deterministic checks with the contract test
scripts/test_vmc_determination.py.
Worked example
Twin jet, 65000 N engines at y = +-8.0 m, S_v 25 m^2, l_v 16 m, rudder
effectiveness 0.8/rad, delta_r_max 30 deg (0.52360 rad), S_r 8.5 m^2,
c_r 1.3 m, C_h_delta_r -0.045, pedal arm 0.35 m, boost factor 0.15
(power-boosted), v_s1g 66 m/s, windmilling drag neglected.
- Critical engine: index 0 (tie, lower index).
- T_op * y_fail = 65000 * 8.0 = 520000 N m.
- Authority limit: q* = 520000 / (25 * 16 * 0.8 * 0.52360) = 3103.5 Pa,
V_auth = sqrt(2 * 3103.5 / 1.225) = 71.18 m/s.
- Force limit: q_F = 667.0 * 0.35 / (8.5 * 1.3 * 0.045 * 0.52360 *
0.15) = 5977.6 Pa, V_force = sqrt(2 * 5977.6 / 1.225) = 98.79 m/s.
- Vmc = max(71.18, 98.79) = 98.79 m/s = 192.0 kt, governing
"pedal-force".
- Pedal force at Vmc: delta_req = 520000 / (5977.6 * 320) = 0.2718 rad
(below the limit), F = 346.2 N, force_ok True (below 667 N).
- Stall guard: 1.05 * 66 = 69.3 m/s below Vmc, guard_verdict
"stall-guard-ok"; flight_test_go True.
- Manual-rudder case (boost 1.0): force at V_auth 71.18 m/s reaches
2308.6 N above the 667 N limit, force_ok False and flight_test_go
False; V_force drops to 38.26 m/s so Vmc = 71.18 m/s governed by
"rudder-authority".
- Windmilling variant (S_f * Cd = 1.5 m^2): the denominator shrinks and
V_auth rises to 73.87 m/s; the pedal-force limit still binds at
98.79 m/s.
Pitfalls
- Reading the governed limit off the wrong constraint: Vmc is the max
of the authority and force limits (max(71.18, 98.79) = 98.79 m/s
governed by "pedal-force"), and with manual rudder the force limit
drops to 38.26 m/s so the authority limit governs at 71.18 m/s.
- Quoting the pedal force without the limit: the force at Vmc is 346.2
N against the 667 N limit (force_ok True), while the manual-rudder
case reaches 2308.6 N with force_ok False and flight_test_go False.
- Neglecting windmilling drag: with S_f * Cd = 1.5 m2 the denominator
shrinks and V_auth rises from 71.18 to 73.87 m/s, so the
no-windmilling assumption understates the critical speed.
- Forgetting the stall guard: Vmc must stay above 1.05 * v_s1g (69.3
m/s here); if the stall guard exceeded Vmc the guard verdict would
not be "stall-guard-ok" and the flight test would not go.
- Assuming a symmetric critical engine: with two engines at y = +-8.0 m
the critical engine is index 0 by the tie rule (lower index), and an
out-of-range failed index raises ValueError.
- Feeding non-physical inputs: empty engine lists, thrust_N <= 0,
negative windmilling area, delta_r_max outside (0, 60] deg, boost
factor outside (0, 1], zero hinge moment coefficient, and v_s1g <= 0
all raise ValueError.
Verification
- Confirm vmc_predict on the worked twin returns vmc 98.79 m/s within
0.05, vmc_kt 192.0 within 0.2, v_auth_m_s 71.18 within 0.05, and
governing "pedal-force".
- Confirm force_at_vmc_N is within 2 N of 346.2, force_ok True, and
the manual-rudder case (boost 1.0) gives 2308.6 N within 5 with
force_ok False and flight_test_go False.
- Confirm the windmilling case (1.5 m^2) gives v_auth_m_s 73.87 within
0.1 and above the no-windmilling 71.18.
- Confirm every non-physical input raises ValueError: empty engine
list, thrust_N <= 0, negative windmilling area, S_v <= 0, l_v <= 0,
effectiveness <= 0, delta_r_max outside (0, 60] deg, S_r <= 0,
c_r <= 0, zero hinge moment coefficient, pedal arm <= 0, boost
factor outside (0, 1], v_s1g <= 0, out-of-range failed index, and
non-positive airspeed for the moment and deflection functions.
- Run the contract test offline: python3
scripts/test_vmc_determination.py (46 tests, deterministic).
Related leaves
- flight-test-operations/envelope/v-speeds: the V-speed set beside
which the Vmc result sits.
- flight-mechanics/performance/oei-climb-gradient: the engine-out
climb performance sibling; this leaf does not compute climb
gradients.
- vehicle-design/sizing/control-surface-sizing: sizing the rudder area
from the yaw moment requirement, upstream of this check.
- flight-mechanics/stability-control/control-surface-effectiveness:
elevator hinge moments and stick force, out of scope here.
- flight-test-operations/envelope/stall-characteristics-testing:
stall demonstration testing behind the stall-protection guard.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_vmc_determination.py
The test covers the critical-engine ranking (tie, outboard, left-side
asymmetric and magnitude cases), the asymmetric yawing moment values
including the windmilling contribution and the negative-side failure,
the required deflection at fixed speeds with the inverse-q scaling and
the deflection-to-moment round trip, the authority-limited and
force-limited closed forms against the worked anchors (71.18 and
98.79 m/s), the Vmc value and governing label, the pedal force at Vmc
(346.2 N boosted, 2308.6 N manual), the force-ok and flight-test-go
flags, the stall-guard verdicts, the knots conversion (192.0 kt), the
windmilling shift of V_auth to 73.87 m/s, and ValueError rejection of
every non-physical input.
Compliance
- Standards referenced, not reproduced: FAR/CS 25.149 frames the
minimum-control-speed method and its 150 lbf pedal-force test
condition; the relations above are standard engineering methodology,
summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: vmc-determination3description: Use when you must predict and check the minimum control speed Vmc of a multi-engine airplane for the engine-inoperative flight test: identify the critical engine from the engine-out yawing moment geometry, build the asymmetric yawing moment from the operating-engine thrust at the failed engine lateral arm plus the windmilling drag contribution, solve the rudder authority limited speed, apply the rudder pedal force criterion with the boost factor against the 150 lbf pedal limit, and apply the stall protection guard on the reference stall speed. Produces the predicted Vmc in m/s and knots, the governing limit label, the asymmetric moment model, and the flight test go verdict. Trigger: minimum control speed, Vmc determination, critical engine, rudder pedal force, asymmetric yawing moment, engine inoperative flight test, 150 lbf pedal limit.4license: Apache-2.05---67# Minimum Control Speed Vmc (flight-test-operations/envelope/vmc-determination)89Use when the task is the Vmc prediction and demonstration check for a10multi-engine airplane in the spirit of the FAR/CS 25.14911minimum-control-speed method, summary-only. This leaf identifies the12critical engine from the engine-out yawing-moment geometry, builds the13asymmetric yawing moment (operating-engine thrust at the failed-engine14lateral arm plus the failed-engine windmilling drag contribution),15computes the rudder deflection required to balance it at each airspeed,16solves the authority-limited speed where the required deflection17reaches the rudder limit, evaluates the rudder pedal-force criterion at18that speed with the boost factor, applies the stall-protection guard on19the reference stall speed, and returns the predicted Vmc with the20governing-limit label and the flight-test go verdict. Model21simplifications: first-order yaw balance without sideslip coupling,22sea-level density for the dynamic pressure, operating engines at23maximum takeoff thrust. It pairs with flight-test-operations v-speeds24(Vmc sits beside the V-speed set), flight-mechanics oei-climb-gradient25(the engine-out performance sibling), and vehicle-design26control-surface-sizing (the rudder sizing sibling).2728## Domain quick reference2930- Critical engine: the engine whose failure gives the largest adverse31 yawing moment, ranked by the |thrust * y_m| product of its lateral32 arm about the CG; ties resolve to the lower index.33- Asymmetric yawing moment: N_asym = T_op * y_fail + 0.5 * RHO_SL *34 V^2 * S_f * Cd * y_fail, where T_op is the sum of the operating35 (non-failed) engine thrusts and y_fail the signed lateral arm of the36 failed engine.37- Rudder deflection required: delta = |N_asym| / (q * S_v * l_v *38 C_Lv_delta_r), with q = 0.5 * RHO_SL * V^2, S_v the fin area, l_v the39 CG-to-fin arm and C_Lv_delta_r the effective fin lift slope per40 rudder deflection (includes the rudder-to-fin area ratio).41- Rudder-authority limit: the speed where delta reaches delta_r_max.42 Closed form q* = T_op * |y_fail| / (S_v * l_v * C_Lv_delta_r *43 delta_r_max_rad - S_f * Cd * |y_fail|); V_auth = sqrt(2 * q* /44 RHO_SL). If the denominator is not positive the configuration is45 never authority limited (V_auth = None).46- Rudder pedal force: F = q * S_r * c_r * |C_h_delta_r| *47 min(delta_req, delta_r_max_rad) * boost_factor / pedal_arm_m, with48 C_h_delta_r the hinge moment coefficient per radian (magnitude used,49 negative for a restoring hinge), S_r and c_r the rudder area and50 chord, and the boost factor scaling felt force (1.0 manual, smaller51 for power-boosted systems).52- Pedal-force limit: F_lim = 667 N (150 lbf criterion of the test53 condition, paraphrased). The force-limited speed V_force follows from54 the quadratic F(V) at the deflection limit, V_force = sqrt(2 * q_F /55 RHO_SL).56- Vmc: vmc = max(V_auth, V_force); the governing limit label is57 "rudder-authority" when V_auth >= V_force else "pedal-force".58- Stall guard: stall_guard_speed = stall_guard * v_s1g (default guard59 factor 1.05). When vmc falls below it the flight test must60 demonstrate above the guard; vmc is reported unchanged with the61 guard_verdict "stall-guard-governs".62- Units are SI: N, m, m/s, rad, deg, N m; knots = m/s * 1.94384.63- FAR/CS 25.149 frames the minimum-control-speed test condition; the64 relations above are standard engineering methodology, summary-only.6566## Workflow67681. Collect the engine layout: engines as a list of {thrust_N, y_m}69 dicts (y_m positive on the right), the failed engine index, and the70 failed-engine windmilling drag area S_f * Cd at speed.712. Confirm the critical engine with critical_engine_index; the failed72 engine is usually the critical one (the leaf reports whichever index73 is given).743. Build the geometry set: S_v, l_v, C_Lv_delta_r, delta_r_max, S_r,75 c_r, C_h_delta_r, pedal arm, boost factor, v_s1g, and the pedal76 force limit and stall guard defaults.774. Compute the authority-limited speed with authority_limited_speed and78 the force-limited speed from the pedal-force quadratic (inside79 vmc_predict as v_force_m_s).805. Run the full prediction with vmc_predict and read vmc_m_s, vmc_kt,81 governing, force_at_vmc_N, force_ok, guard_verdict and82 flight_test_go.836. Inspect the asymmetric moment model at Vmc with84 asymmetric_yaw_moment_Nm for the moment value carried by the85 rudder.867. If force_ok is False or guard_verdict is "stall-guard-governs", the87 engine-inoperative flight test cannot clear the Vmc demonstration as88 configured; revisit the boost factor or the demonstration speed.898. Confirm the deterministic checks with the contract test90 scripts/test_vmc_determination.py.9192## Worked example9394Twin jet, 65000 N engines at y = +-8.0 m, S_v 25 m^2, l_v 16 m, rudder95effectiveness 0.8/rad, delta_r_max 30 deg (0.52360 rad), S_r 8.5 m^2,96c_r 1.3 m, C_h_delta_r -0.045, pedal arm 0.35 m, boost factor 0.1597(power-boosted), v_s1g 66 m/s, windmilling drag neglected.9899- Critical engine: index 0 (tie, lower index).100- T_op * y_fail = 65000 * 8.0 = 520000 N m.101- Authority limit: q* = 520000 / (25 * 16 * 0.8 * 0.52360) = 3103.5 Pa,102 V_auth = sqrt(2 * 3103.5 / 1.225) = 71.18 m/s.103- Force limit: q_F = 667.0 * 0.35 / (8.5 * 1.3 * 0.045 * 0.52360 *104 0.15) = 5977.6 Pa, V_force = sqrt(2 * 5977.6 / 1.225) = 98.79 m/s.105- Vmc = max(71.18, 98.79) = 98.79 m/s = 192.0 kt, governing106 "pedal-force".107- Pedal force at Vmc: delta_req = 520000 / (5977.6 * 320) = 0.2718 rad108 (below the limit), F = 346.2 N, force_ok True (below 667 N).109- Stall guard: 1.05 * 66 = 69.3 m/s below Vmc, guard_verdict110 "stall-guard-ok"; flight_test_go True.111- Manual-rudder case (boost 1.0): force at V_auth 71.18 m/s reaches112 2308.6 N above the 667 N limit, force_ok False and flight_test_go113 False; V_force drops to 38.26 m/s so Vmc = 71.18 m/s governed by114 "rudder-authority".115- Windmilling variant (S_f * Cd = 1.5 m^2): the denominator shrinks and116 V_auth rises to 73.87 m/s; the pedal-force limit still binds at117 98.79 m/s.118119## Pitfalls120121- Reading the governed limit off the wrong constraint: Vmc is the max122 of the authority and force limits (max(71.18, 98.79) = 98.79 m/s123 governed by "pedal-force"), and with manual rudder the force limit124 drops to 38.26 m/s so the authority limit governs at 71.18 m/s.125- Quoting the pedal force without the limit: the force at Vmc is 346.2126 N against the 667 N limit (force_ok True), while the manual-rudder127 case reaches 2308.6 N with force_ok False and flight_test_go False.128- Neglecting windmilling drag: with S_f * Cd = 1.5 m2 the denominator129 shrinks and V_auth rises from 71.18 to 73.87 m/s, so the130 no-windmilling assumption understates the critical speed.131- Forgetting the stall guard: Vmc must stay above 1.05 * v_s1g (69.3132 m/s here); if the stall guard exceeded Vmc the guard verdict would133 not be "stall-guard-ok" and the flight test would not go.134- Assuming a symmetric critical engine: with two engines at y = +-8.0 m135 the critical engine is index 0 by the tie rule (lower index), and an136 out-of-range failed index raises ValueError.137- Feeding non-physical inputs: empty engine lists, thrust_N <= 0,138 negative windmilling area, delta_r_max outside (0, 60] deg, boost139 factor outside (0, 1], zero hinge moment coefficient, and v_s1g <= 0140 all raise ValueError.141142## Verification143144- Confirm vmc_predict on the worked twin returns vmc 98.79 m/s within145 0.05, vmc_kt 192.0 within 0.2, v_auth_m_s 71.18 within 0.05, and146 governing "pedal-force".147- Confirm force_at_vmc_N is within 2 N of 346.2, force_ok True, and148 the manual-rudder case (boost 1.0) gives 2308.6 N within 5 with149 force_ok False and flight_test_go False.150- Confirm the windmilling case (1.5 m^2) gives v_auth_m_s 73.87 within151 0.1 and above the no-windmilling 71.18.152- Confirm every non-physical input raises ValueError: empty engine153 list, thrust_N <= 0, negative windmilling area, S_v <= 0, l_v <= 0,154 effectiveness <= 0, delta_r_max outside (0, 60] deg, S_r <= 0,155 c_r <= 0, zero hinge moment coefficient, pedal arm <= 0, boost156 factor outside (0, 1], v_s1g <= 0, out-of-range failed index, and157 non-positive airspeed for the moment and deflection functions.158- Run the contract test offline: python3159 scripts/test_vmc_determination.py (46 tests, deterministic).160161## Related leaves162163- flight-test-operations/envelope/v-speeds: the V-speed set beside164 which the Vmc result sits.165- flight-mechanics/performance/oei-climb-gradient: the engine-out166 climb performance sibling; this leaf does not compute climb167 gradients.168- vehicle-design/sizing/control-surface-sizing: sizing the rudder area169 from the yaw moment requirement, upstream of this check.170- flight-mechanics/stability-control/control-surface-effectiveness:171 elevator hinge moments and stick force, out of scope here.172- flight-test-operations/envelope/stall-characteristics-testing:173 stall demonstration testing behind the stall-protection guard.174175## Behavior contract (gate 3)176177Run the deterministic contract test (stdlib unittest, offline):178179 python3 scripts/test_vmc_determination.py180181The test covers the critical-engine ranking (tie, outboard, left-side182asymmetric and magnitude cases), the asymmetric yawing moment values183including the windmilling contribution and the negative-side failure,184the required deflection at fixed speeds with the inverse-q scaling and185the deflection-to-moment round trip, the authority-limited and186force-limited closed forms against the worked anchors (71.18 and18798.79 m/s), the Vmc value and governing label, the pedal force at Vmc188(346.2 N boosted, 2308.6 N manual), the force-ok and flight-test-go189flags, the stall-guard verdicts, the knots conversion (192.0 kt), the190windmilling shift of V_auth to 73.87 m/s, and ValueError rejection of191every non-physical input.192193## Compliance194195- Standards referenced, not reproduced: FAR/CS 25.149 frames the196 minimum-control-speed method and its 150 lbf pedal-force test197 condition; the relations above are standard engineering methodology,198 summary-only per standards-map.yaml.199- compliance: STANDARDS-REF, gated: false.