Engine Failure Takeoff Flight Test (flight-test-operations/performance/engine-failure-takeoff-flight-test)
Use when the task is the critical-engine (one-engine-inoperative)
takeoff flight test reduction: locate the engine failure point in the
measured ground run, add the V1 recognition time segment, continue the
takeoff to the 35 ft obstacle at the measured engine-out climb rate,
and set the decision speed V1 at the balanced field intersection of
the stop-distance curve and the continued engine-out takeoff distance
curve. This leaf implements the reduction in pure Python, stdlib only.
It pairs with flight-test-operations/performance/takeoff-distance-
determination for the all-engine runs and with flight-test-operations/
performance/accelerate-stop-distance, whose simplified all-engine
rejected-takeoff model explicitly defers the balanced-field V1 to a
full engine-out model (this leaf).
Domain quick reference
- Speeds in m/s, accelerations in m/s^2, distances in m. Measured
ground speed samples v(t) come from the takeoff run; the engine
failure speed VEF, recognition time t_rec, decision speed V1,
takeoff safety speed V2 and rotation speed V_R bound the segments.
- Engine failure distance: trapezoid integration of the measured
ground speed from brake release to the interpolated crossing of VEF
in the samples (engine_failure_distance). For a constant
acceleration a the closed form is s_ef = v_ef^2 / (2 a).
- Recognition distance: s_rec = V1 * t_rec, a constant-speed segment
at the decision speed during the recognition interval.
- Continued climb to the obstacle: s_climb = V2 * h_target / ROC_oei
with h_target = H_TARGET_M = 10.668 m (35 ft) and ROC_oei the
measured one-engine-inoperative rate of climb.
- Engine-out takeoff distance chaining (engine_out_takeoff_distance):
total = failure leg + s_rec + continued ground segment accelerating
V1 to V2 at a_cont, (v2^2 - v1^2) / (2 * a_cont) + s_climb. The TOD
curve values used for the balance already embed these legs.
- Balanced-field V1: the speed where the stop-distance curve ASD(V1)
equals the continued engine-out takeoff distance curve TOD(V1);
balanced_field_v1 finds the lowest-speed segment-linear intersection
over the shared speed range. When no crossing exists it returns
(None, regime): 'asd-limited' when the engine-out TOD curve lies
everywhere at or above the ASD curve (balance above the tested
speeds), 'tod-limited' in the reverse case.
- Ordering checks: V1 >= VEF + a_cont * t_rec (v1_min) and V1 <= V_R.
- Field verdict: margin = runway_m - balanced distance; fits when
margin >= 0. A negative margin is a real outcome (too short).
- FAR-25 (14 CFR Part 25) frames the takeoff field length and V1
certification-test context; the relations above are standard
flight-test methodology, summary-only.
Workflow
- Reduce the failure leg: with measured speed and time samples,
engine_failure_distance(v_samples, t_samples, v_ef) integrates the
ground run to the VEF crossing.
- Add the recognition segment at the decision speed with
recognition_distance(v1, t_rec).
- Close the continued takeoff: continued_climb_distance(v2, roc_oei)
for the 35 ft closure, or engine_out_takeoff_distance for the full
chained total (failure + recognition + ground acceleration V1 to V2
- Determine the balanced decision speed: balanced_field_v1 on the ASD
and engine-out TOD curves gives (v1, distance), or (None, regime)
when the curves do not cross in the tested speed range.
- Run the ordering checks with v1_ordering_verdict (V1 >= VEF +
a_cont * t_rec and V1 <= V_R) and the runway fit with
field_length_verdict(runway, distance).
- Assemble the reduction with engine_failure_takeoff_summary, which
reports the regime, balanced V1 and distance, v1_min, recognition
distance, ordering verdicts and field verdict in one dict.
- Confirm the deterministic checks with the contract test.
Worked example
ASD curve at 60-80 m/s: [1350, 1450, 1560, 1680, 1810] m. Engine-out
TOD curve: [1620, 1600, 1590, 1605, 1630] m. VEF 58 m/s, recognition
1.0 s, continued acceleration 1.8 m/s^2, V_R 80 m/s, runway 1700 m.
Real module outputs:
- balanced_field_v1 returns V1 = 71.43 m/s (crossing between 70 and
75 m/s) at 1594.29 m.
- v1_min = VEF + a_cont * t_rec = 59.8 m/s <= 71.43 (pass, margin
11.63 m/s) and V1 <= V_R (pass, margin 8.57 m/s); ordering pass.
- field_length_verdict: margin = 1700 - 1594.29 = +105.71 m, fits.
- recognition_distance at the balanced V1: 71.43 m.
- engine_failure_takeoff_summary keys: regime, balanced_field_v1_mps,
balanced_field_distance_m, v1_min_mps, recognition_distance_m,
ordering_verdict, field_verdict.
- continued_climb_distance(80, 6) = 142.24 m to the 35 ft obstacle at
a 6 m/s engine-out rate; on a 2 m/s^2 ramp,
engine_failure_distance to 25 m/s returns 156.25 m, matching
v_ef^2 / (2 a) = 625 / 4.
Pitfalls
- Expecting a balanced V1 when the curves never cross: a TOD curve
everywhere above the ASD returns (None, 'asd-limited') and the
reverse returns (None, 'tod-limited'), so the balanced-field
distance only exists at the crossing (71.43 m/s at 1594.29 m here).
- Quoting V1 without the ordering checks: v1_min = VEF + a_cont *
t_rec = 59.8 m/s must sit at or below V1 (margin 11.63 m/s) and V1
at or below V_R (margin 8.57 m/s); a longer recognition time raises
v1_min and tightens the ordering.
- Reading the field verdict without the runway: the margin is the
runway minus the balanced distance (1700 - 1594.29 = +105.71 m
fits), so a longer runway raises the field margin.
- Hand-computing the engine-failure distance instead of the ramp rule:
on a linear ramp the distance equals v_ef^2 / (2 a) (156.25 m for
25 m/s at 2 m/s^2), the constant-acceleration identity the contract
asserts.
- Feeding non-physical or out-of-order arrays: empty samples,
non-positive v_ef, recognition time, rate of climb, obstacle height,
or runway length, and descending or non-monotone ASD/TOD arrays all
raise ValueError.
- Confusing this leaf with its siblings: accelerate-stop-distance owns
the all-engine rejected takeoff without the engine-out asymmetry,
and takeoff-distance-determination owns the all-engine distance runs
with no VEF token.
Verification
- Confirm balanced_field_v1(SPEEDS, ASD, SPEEDS, TOD) returns about
71.43 m/s at about 1594.3 m and that both curves equal the returned
distance at that speed.
- Confirm the ordering verdict passes and the field verdict fits with
margin about +106 m against the 1700 m runway.
- Confirm a TOD curve everywhere above the ASD curve returns
(None, 'asd-limited') and the reverse returns (None, 'tod-limited').
- Confirm the constant-acceleration identity
engine_failure_distance == v_ef^2 / (2 a) on a linear ramp sample.
- Confirm longer recognition time raises v1_min (tighter ordering) and
a longer runway raises the field margin.
- Confirm ValueError rejection of empty samples, non-positive
v_ef/t_rec/roc/h/runway, and descending or non-monotone arrays.
- Confirm run-to-run determinism and the exact summary key set.
- Run the contract test offline: python3
scripts/test_engine_failure_takeoff_flight_test.py (34 tests).
Related leaves
- flight-test-operations/performance/accelerate-stop-distance: the ASD
sibling that defers the balanced-field model (all-engine rejected
takeoff with no engine-out asymmetry).
- flight-test-operations/performance/takeoff-distance-determination:
the all-engine takeoff distance runs (no VEF token).
- flight-test-operations/envelope/vmc-determination: the asymmetric
control boundary (Vmc, critical-engine yaw), not the takeoff
distance or V1.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_engine_failure_takeoff_flight_test.py
The test covers the trapezoid engine-failure distance and its
closed-form identity on a constant-acceleration ramp, the recognition
segment, the continued climb to the 35 ft obstacle, the chained
engine-out takeoff distance, the balanced-field intersection anchors
(71.43 m/s at 1594.3 m), the ASD-limited and TOD-limited regime flags,
the ordering checks with their boundaries, the runway field verdict
and its margins, the reduction summary key set, determinism, and
ValueError rejection of empty, non-positive and non-monotone inputs.
Compliance
- Standards referenced, not reproduced: FAR-25 (14 CFR Part 25) is US
government work (public domain) and CS-25 is a free EASA download;
the V1 and field-length certification-test context is paraphrased,
summary-only per standards-map.yaml (far-25, cs-25).
- compliance: STANDARDS-REF, gated: false.
1---2name: engine-failure-takeoff-flight-test3description: Use when you must reduce the engine-out takeoff flight test: locate the engine failure point in the measured ground run at the failure speed VEF, add the V1 recognition time segment, integrate the continued takeoff to the 35 ft obstacle at the measured engine out climb rate, and set the decision speed V1 at the balanced field intersection where the stop distance curve equals the continued engine out takeoff distance curve. Produces the engine failure distance, the recognition distance, the continued engine out distance, the balanced field V1 and distance, and the runway fit verdict. Trigger: balanced field, engine out takeoff, decision speed V1, VEF, engine failure flight test, 35 ft obstacle, takeoff field length, field length verdict.4license: Apache-2.05---67# Engine Failure Takeoff Flight Test (flight-test-operations/performance/engine-failure-takeoff-flight-test)89Use when the task is the critical-engine (one-engine-inoperative)10takeoff flight test reduction: locate the engine failure point in the11measured ground run, add the V1 recognition time segment, continue the12takeoff to the 35 ft obstacle at the measured engine-out climb rate,13and set the decision speed V1 at the balanced field intersection of14the stop-distance curve and the continued engine-out takeoff distance15curve. This leaf implements the reduction in pure Python, stdlib only.16It pairs with flight-test-operations/performance/takeoff-distance-17determination for the all-engine runs and with flight-test-operations/18performance/accelerate-stop-distance, whose simplified all-engine19rejected-takeoff model explicitly defers the balanced-field V1 to a20full engine-out model (this leaf).2122## Domain quick reference2324- Speeds in m/s, accelerations in m/s^2, distances in m. Measured25 ground speed samples v(t) come from the takeoff run; the engine26 failure speed VEF, recognition time t_rec, decision speed V1,27 takeoff safety speed V2 and rotation speed V_R bound the segments.28- Engine failure distance: trapezoid integration of the measured29 ground speed from brake release to the interpolated crossing of VEF30 in the samples (engine_failure_distance). For a constant31 acceleration a the closed form is s_ef = v_ef^2 / (2 a).32- Recognition distance: s_rec = V1 * t_rec, a constant-speed segment33 at the decision speed during the recognition interval.34- Continued climb to the obstacle: s_climb = V2 * h_target / ROC_oei35 with h_target = H_TARGET_M = 10.668 m (35 ft) and ROC_oei the36 measured one-engine-inoperative rate of climb.37- Engine-out takeoff distance chaining (engine_out_takeoff_distance):38 total = failure leg + s_rec + continued ground segment accelerating39 V1 to V2 at a_cont, (v2^2 - v1^2) / (2 * a_cont) + s_climb. The TOD40 curve values used for the balance already embed these legs.41- Balanced-field V1: the speed where the stop-distance curve ASD(V1)42 equals the continued engine-out takeoff distance curve TOD(V1);43 balanced_field_v1 finds the lowest-speed segment-linear intersection44 over the shared speed range. When no crossing exists it returns45 (None, regime): 'asd-limited' when the engine-out TOD curve lies46 everywhere at or above the ASD curve (balance above the tested47 speeds), 'tod-limited' in the reverse case.48- Ordering checks: V1 >= VEF + a_cont * t_rec (v1_min) and V1 <= V_R.49- Field verdict: margin = runway_m - balanced distance; fits when50 margin >= 0. A negative margin is a real outcome (too short).51- FAR-25 (14 CFR Part 25) frames the takeoff field length and V152 certification-test context; the relations above are standard53 flight-test methodology, summary-only.5455## Workflow56571. Reduce the failure leg: with measured speed and time samples,58 engine_failure_distance(v_samples, t_samples, v_ef) integrates the59 ground run to the VEF crossing.602. Add the recognition segment at the decision speed with61 recognition_distance(v1, t_rec).623. Close the continued takeoff: continued_climb_distance(v2, roc_oei)63 for the 35 ft closure, or engine_out_takeoff_distance for the full64 chained total (failure + recognition + ground acceleration V1 to V265 + climb).664. Determine the balanced decision speed: balanced_field_v1 on the ASD67 and engine-out TOD curves gives (v1, distance), or (None, regime)68 when the curves do not cross in the tested speed range.695. Run the ordering checks with v1_ordering_verdict (V1 >= VEF +70 a_cont * t_rec and V1 <= V_R) and the runway fit with71 field_length_verdict(runway, distance).726. Assemble the reduction with engine_failure_takeoff_summary, which73 reports the regime, balanced V1 and distance, v1_min, recognition74 distance, ordering verdicts and field verdict in one dict.757. Confirm the deterministic checks with the contract test.7677## Worked example7879ASD curve at 60-80 m/s: [1350, 1450, 1560, 1680, 1810] m. Engine-out80TOD curve: [1620, 1600, 1590, 1605, 1630] m. VEF 58 m/s, recognition811.0 s, continued acceleration 1.8 m/s^2, V_R 80 m/s, runway 1700 m.82Real module outputs:8384- balanced_field_v1 returns V1 = 71.43 m/s (crossing between 70 and85 75 m/s) at 1594.29 m.86- v1_min = VEF + a_cont * t_rec = 59.8 m/s <= 71.43 (pass, margin87 11.63 m/s) and V1 <= V_R (pass, margin 8.57 m/s); ordering pass.88- field_length_verdict: margin = 1700 - 1594.29 = +105.71 m, fits.89- recognition_distance at the balanced V1: 71.43 m.90- engine_failure_takeoff_summary keys: regime, balanced_field_v1_mps,91 balanced_field_distance_m, v1_min_mps, recognition_distance_m,92 ordering_verdict, field_verdict.93- continued_climb_distance(80, 6) = 142.24 m to the 35 ft obstacle at94 a 6 m/s engine-out rate; on a 2 m/s^2 ramp,95 engine_failure_distance to 25 m/s returns 156.25 m, matching96 v_ef^2 / (2 a) = 625 / 4.9798## Pitfalls99100- Expecting a balanced V1 when the curves never cross: a TOD curve101 everywhere above the ASD returns (None, 'asd-limited') and the102 reverse returns (None, 'tod-limited'), so the balanced-field103 distance only exists at the crossing (71.43 m/s at 1594.29 m here).104- Quoting V1 without the ordering checks: v1_min = VEF + a_cont *105 t_rec = 59.8 m/s must sit at or below V1 (margin 11.63 m/s) and V1106 at or below V_R (margin 8.57 m/s); a longer recognition time raises107 v1_min and tightens the ordering.108- Reading the field verdict without the runway: the margin is the109 runway minus the balanced distance (1700 - 1594.29 = +105.71 m110 fits), so a longer runway raises the field margin.111- Hand-computing the engine-failure distance instead of the ramp rule:112 on a linear ramp the distance equals v_ef^2 / (2 a) (156.25 m for113 25 m/s at 2 m/s^2), the constant-acceleration identity the contract114 asserts.115- Feeding non-physical or out-of-order arrays: empty samples,116 non-positive v_ef, recognition time, rate of climb, obstacle height,117 or runway length, and descending or non-monotone ASD/TOD arrays all118 raise ValueError.119- Confusing this leaf with its siblings: accelerate-stop-distance owns120 the all-engine rejected takeoff without the engine-out asymmetry,121 and takeoff-distance-determination owns the all-engine distance runs122 with no VEF token.123124## Verification125126- Confirm balanced_field_v1(SPEEDS, ASD, SPEEDS, TOD) returns about127 71.43 m/s at about 1594.3 m and that both curves equal the returned128 distance at that speed.129- Confirm the ordering verdict passes and the field verdict fits with130 margin about +106 m against the 1700 m runway.131- Confirm a TOD curve everywhere above the ASD curve returns132 (None, 'asd-limited') and the reverse returns (None, 'tod-limited').133- Confirm the constant-acceleration identity134 engine_failure_distance == v_ef^2 / (2 a) on a linear ramp sample.135- Confirm longer recognition time raises v1_min (tighter ordering) and136 a longer runway raises the field margin.137- Confirm ValueError rejection of empty samples, non-positive138 v_ef/t_rec/roc/h/runway, and descending or non-monotone arrays.139- Confirm run-to-run determinism and the exact summary key set.140- Run the contract test offline: python3141 scripts/test_engine_failure_takeoff_flight_test.py (34 tests).142143## Related leaves144145- flight-test-operations/performance/accelerate-stop-distance: the ASD146 sibling that defers the balanced-field model (all-engine rejected147 takeoff with no engine-out asymmetry).148- flight-test-operations/performance/takeoff-distance-determination:149 the all-engine takeoff distance runs (no VEF token).150- flight-test-operations/envelope/vmc-determination: the asymmetric151 control boundary (Vmc, critical-engine yaw), not the takeoff152 distance or V1.153154## Behavior contract (gate 3)155156Run the deterministic contract test (stdlib unittest, offline):157158 python3 scripts/test_engine_failure_takeoff_flight_test.py159160The test covers the trapezoid engine-failure distance and its161closed-form identity on a constant-acceleration ramp, the recognition162segment, the continued climb to the 35 ft obstacle, the chained163engine-out takeoff distance, the balanced-field intersection anchors164(71.43 m/s at 1594.3 m), the ASD-limited and TOD-limited regime flags,165the ordering checks with their boundaries, the runway field verdict166and its margins, the reduction summary key set, determinism, and167ValueError rejection of empty, non-positive and non-monotone inputs.168169## Compliance170171- Standards referenced, not reproduced: FAR-25 (14 CFR Part 25) is US172 government work (public domain) and CS-25 is a free EASA download;173 the V1 and field-length certification-test context is paraphrased,174 summary-only per standards-map.yaml (far-25, cs-25).175- compliance: STANDARDS-REF, gated: false.