Windshear Analysis (flight-mechanics/performance/windshear-analysis)
Use when the task is the low-altitude windshear and microburst HAZARD
assessment for the escape decision: the F-factor of the encounter, the
severity class against the typical escape-guidance thresholds, the
energy height loss over the shear, the out-climb capability against the
downdraft, and the thrust increment needed for recovery. This leaf
implements the simplified energy-based F-factor model used in windshear
training (FAA windshear training guidance, paraphrased reference-only)
in pure Python, stdlib only. It pairs with wind-effects for the steady
wind triangle (headwind and crosswind components, crab angle,
groundspeed), with energy-height for the energy state and zoom climb
trades, and with climb-performance for the excess-thrust capability.
This leaf does NOT decompose steady winds or trade energy: it sizes the
transient shear hazard itself.
Domain quick reference
- Along-track wind acceleration: a_wind = d(HW)/dt in m/s^2, positive
when the headwind component increases with time. An increasing
headwind is a PERFORMANCE INCREASE (it raises the airspeed without
thrust); a decreasing headwind, or an increasing tailwind, is the
hazard that erodes the airspeed.
- F-factor, standard form: F = (T - D)/W - a_wind/g, with T thrust, D
drag, W weight in N and g = 9.80665 m/s^2. In calm air with T = D the
F-factor is zero; a decreasing headwind of 8 kt/s (4.116 m/s^2)
contributes about 0.42 to F.
- Capability and demand split used for escape guidance:
F_available = (T - D)/W and F_demand = -a_wind/g + w_d/v, where w_d
is the downdraft (positive downward, m/s) and v the true airspeed.
The total encounter F-factor is F_total = F_available + F_demand.
- Headwind-gradient form: the altitude shear d(HW)/dh (1/s) is
converted to the along-track time rate with the aircraft vertical
speed; this module uses the steady-flight relation dh/dt =
v*(T - D)/W (sin(gamma) = (T - D)/W for unaccelerated flight), so
a_wind = (dHW/dh)v(T - D)/W and
F = (T - D)/W - a_wind/g + w_d/v. A descent through a shear layer in
which the headwind decreases with decreasing altitude raises F.
- Severity classes (typical training thresholds, NOT a regulation):
F below 0.05 low, 0.05 to 0.1 moderate, 0.1 to 0.15 high, above
0.15 severe. Applied to the encounter demand F_demand.
- Energy height loss: with specific energy E_s = h + v^2/(2g), the
shear erodes energy height at dH_e/dt = v*(F_demand - F_available);
at the approach escape condition (engines near the drag level,
F_available about zero) this equals v*F_total. Altitude loss over
the encounter is the rate times the encounter time.
- Downdraft out-climb check: the still-air maximum climb rate from the
excess thrust is RC = v*(T - D)/W. If the downdraft exceeds RC the
aircraft descends even at full current thrust.
- Recovery: the thrust increase that lifts F_available to the demand
level is dT = W*(F_demand - F_available); report it and the
thrust-to-weight increment.
- Escape ladder (deterministic): demand at or above 0.15 escape, 0.10
high-alert, 0.05 moderate-alert, below 0.05 monitor.
- Units are SI throughout: N, m/s, m/s^2, m, s. Module constants fix
the scale: G0 = 9.80665 m/s^2 and KT_TO_MS = 463/900 m/s per knot,
so every number in this leaf is exactly reproducible.
- FAR 25 and CS 25 set the certification context (reference-only); the
relations above are standard engineering methodology, summary-only.
Workflow
- Fix the encounter state: mass to weight with weight_from_mass
(W = mg), true airspeed v, thrust T and drag D at the encounter
start, and the wind inputs: the along-track wind acceleration
a_wind = d(HW)/dt (from the observed headwind rate, e.g. 8 kt/s of
decreasing headwind becomes -8KT_TO_MS m/s^2) or the headwind
gradient d(HW)/dh, plus the downdraft w_d.
- Compute the total F-factor: f_factor_from_thrust with the direct
wind acceleration, or f_factor_from_wind_gradients with the
altitude gradient, downdraft, speed, weight, thrust and drag.
- Classify the encounter with severity_class on the demand component
(F_total - F_available); at the approach condition where thrust
equals drag the total and the demand coincide.
- Get the energy height loss rate with energy_height_loss_rate and
the altitude loss over the encounter with altitude_loss, or let
windshear_verdict apply the exact v*(F_demand - F_available) form.
- Run the downdraft out-climb check with
max_climb_rate_in_downdraft (excess thrust, weight, downdraft,
speed): RC = v*(T - D)/W against the downdraft.
- Size the recovery with required_thrust_increment: the demand
F_demand as f_target and the current excess-thrust ratio (T - D)/W
as current_f gives dT = W*(F_demand - F_available).
- For the full picture call windshear_verdict(t, d, w, v, a_wind,
downdraft, time_s) and read the f_available, f_demand, f_total,
severity, energy_height_loss_rate_mps, altitude_loss_m, climb
verdict and escape_verdict fields.
- Confirm the deterministic checks with the contract test
scripts/test_windshear_analysis.py.
Worked example
A transport on approach at v = 75 m/s, mass 55,000 kg (W = m*g =
539,365.75 N), engines at the approach setting with thrust equal to
drag at T = D = 77,000 N (L/D about 7.0), so F_available = 0. The
aircraft penetrates a microburst outflow: the headwind decreases at
8 kt/s, a_wind = -8 * 463/900 = -4.11556 m/s^2, and the downdraft is
w_d = 6 m/s. Encounter time 20 s.
- Shear F-factor: F = 0 - (-4.11556)/9.80665 = 0.41967
(f_factor_from_thrust returns 0.419670).
- Downdraft component: F_z = w_d/v = 6/75 = 0.08.
- Total F-factor of the encounter: F_total = 0.49967.
- Severity: severe (well above the 0.15 training threshold): the
escape decision is required (escape_verdict "escape").
- Energy height loss rate: v*F_total = 37.475 m/s.
- Altitude loss over the 20 s encounter: 749.5 m of energy height.
- Out-climb check: RC = 75 * 0 / 539,365.75 = 0 m/s, far below the
6 m/s downdraft, so the aircraft descends through the shear
(climb_verdict "descend", out_climbs False).
- Recovery: dT = W*(F_demand - F_available) = 539,365.75 * 0.49967 =
269,505 N, a thrust-to-weight increment of 0.4997. That exceeds the
excess thrust ratio a go-around can deliver (about 0.3 to 0.4 for a
transport), so the aircraft cannot neutralize the shear by thrust
alone: escape now, do not attempt to continue the approach.
Verification
- Confirm f_factor_from_thrust(77000, 77000, 539365.75, -4.11556)
returns 0.419670 and that adding w_d/v = 0.08 gives 0.499670.
- Confirm f_factor_from_thrust with the same magnitude but an
INCREASING headwind (+4.11556 m/s^2) returns -0.419670 (the wind
adds energy: negative F, severity low).
- Confirm severity_class hits moderate at exactly 0.05, high at 0.1
and severe at 0.15, with 0.0499 low and 0.1499 high.
- Confirm energy_height_loss_rate(0.499670, 75) = 37.475 m/s and
altitude_loss(0.499670, 75, 20) = 749.505 m (rate times time).
- Confirm max_climb_rate_in_downdraft returns out_climbs False with
verdict descend for zero excess thrust against a 6 m/s downdraft,
and out_climbs True (RC = 7.5 m/s) for an excess thrust ratio of
0.1.
- Confirm required_thrust_increment(0.499670, 0.0, 539365.75) =
269,504.8 N, and zero when current_f already equals f_target.
- Confirm windshear_verdict on the worked example returns f_total
0.499670, severity severe, energy_height_loss_rate_mps 37.475,
altitude_loss_m 749.505, out_climbs False and escape_verdict
"escape"; a calm encounter (a_wind = 0, w_d = 0, T = D) returns
f_total 0.0, severity low, zero loss and escape_verdict "monitor".
- Confirm every non-positive weight, mass, speed or thrust, negative
drag, and negative encounter time raises ValueError.
- Run the contract test offline: python3
scripts/test_windshear_analysis.py (deterministic, exit 0).
Pitfalls
- Getting the wind-acceleration sign backwards: a_wind is positive when the
headwind increases (a performance increase that lowers F); the hazard is a
decreasing headwind - an 8 kt/s decreasing headwind contributes about
+0.42 to F, and an increasing headwind of the same magnitude gives -0.42
(severity low).
- Classifying severity on the total instead of the demand: severity_class
applies to the demand component F_demand (F_total - F_available); at the
approach condition T = D the two coincide, but with excess thrust
available they differ.
- Treating the severity thresholds as a regulation: 0.05/0.1/0.15 are
typical training thresholds, not a regulatory limit, and the escape ladder
is deterministic (escape at demand >= 0.15).
- Quoting altitude loss without the encounter time: the energy height erodes
at v*F_total (37.5 m/s in the worked example) and altitude_loss is the
rate times the encounter time (749.5 m over 20 s).
- Concluding 'can recover' from the thrust increment alone: dT = W*(F_demand
- F_available) came out at 269.5 kN (thrust-to-weight 0.4997) for the
worked approach, above the about 0.3-0.4 a go-around can deliver, so the
verdict is escape now.
- Non-positive weight, mass, speed or thrust, negative drag, and negative
encounter time raise ValueError.
Related leaves
- flight-mechanics/performance/wind-effects: the steady wind triangle,
groundspeed and crab angle; this leaf is the transient shear hazard.
- flight-mechanics/performance/energy-height: the energy state, zoom
climb and specific excess power context behind the energy height
loss rate.
- flight-mechanics/performance/climb-performance: excess-thrust climb
capability and rates for the out-climb and recovery checks.
- flight-mechanics/performance/takeoff-performance and
flight-mechanics/performance/landing-performance: distance
performance under steady wind, adjacent to the shear hazard cases.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_windshear_analysis.py
The test covers the worked-example contract (F-factor 0.419670 from an
8 kt/s decreasing headwind at the stated weight, total 0.499670 with
the 6 m/s downdraft, severity severe, energy height loss rate
37.475 m/s, altitude loss 749.5 m over 20 s, recovery increment
269,505 N), the thrust and headwind-gradient F-factor forms, the
severity band boundaries, the downdraft out-climb verdicts including
the marginal equality case, energy height loss rate and altitude loss
scaling, the recovery increment including the already-sufficient zero
case, the full windshear_verdict dict on the example and on a calm
encounter, the round-trip zero-F identity in calm air, and ValueError
rejection of non-positive weight, mass, airspeed and thrust, negative
drag and negative encounter time.
Compliance
- Standards referenced, not reproduced: FAR 25 and CS 25 are public
regulation context (certification of transport category airplanes);
the F-factor relations and severity bands are standard engineering
methodology summarized from FAA windshear training guidance,
summary-only per standards-map.yaml. No regulatory or training text
is reproduced.
- compliance: STANDARDS-REF, gated: false.
1---2name: windshear-analysis3description: Use when you must assess a low-altitude windshear or microburst encounter on fixed-wing aircraft performance and choose the escape response: compute the windshear F-factor from thrust, drag, weight and the along-track headwind shear rate, or from the headwind gradient and the downdraft; classify the shear severity against the typical escape-guidance thresholds; compute the energy height loss rate and the altitude loss over the encounter; check whether the aircraft can out-climb the downdraft at the current thrust; and find the thrust increment needed for the recovery. Produces the F-factor, the severity class, the energy height loss trend, the out-climb verdict, and the recovery increment that gate the windshear escape decision. Trigger: windshear, microburst, F-factor, downdraft, headwind shear, wind shear hazard, escape guidance, energy height loss, shear encounter.4license: Apache-2.05---67# Windshear Analysis (flight-mechanics/performance/windshear-analysis)89Use when the task is the low-altitude windshear and microburst HAZARD10assessment for the escape decision: the F-factor of the encounter, the11severity class against the typical escape-guidance thresholds, the12energy height loss over the shear, the out-climb capability against the13downdraft, and the thrust increment needed for recovery. This leaf14implements the simplified energy-based F-factor model used in windshear15training (FAA windshear training guidance, paraphrased reference-only)16in pure Python, stdlib only. It pairs with wind-effects for the steady17wind triangle (headwind and crosswind components, crab angle,18groundspeed), with energy-height for the energy state and zoom climb19trades, and with climb-performance for the excess-thrust capability.20This leaf does NOT decompose steady winds or trade energy: it sizes the21transient shear hazard itself.2223## Domain quick reference2425- Along-track wind acceleration: a_wind = d(HW)/dt in m/s^2, positive26 when the headwind component increases with time. An increasing27 headwind is a PERFORMANCE INCREASE (it raises the airspeed without28 thrust); a decreasing headwind, or an increasing tailwind, is the29 hazard that erodes the airspeed.30- F-factor, standard form: F = (T - D)/W - a_wind/g, with T thrust, D31 drag, W weight in N and g = 9.80665 m/s^2. In calm air with T = D the32 F-factor is zero; a decreasing headwind of 8 kt/s (4.116 m/s^2)33 contributes about 0.42 to F.34- Capability and demand split used for escape guidance:35 F_available = (T - D)/W and F_demand = -a_wind/g + w_d/v, where w_d36 is the downdraft (positive downward, m/s) and v the true airspeed.37 The total encounter F-factor is F_total = F_available + F_demand.38- Headwind-gradient form: the altitude shear d(HW)/dh (1/s) is39 converted to the along-track time rate with the aircraft vertical40 speed; this module uses the steady-flight relation dh/dt =41 v*(T - D)/W (sin(gamma) = (T - D)/W for unaccelerated flight), so42 a_wind = (dHW/dh)*v*(T - D)/W and43 F = (T - D)/W - a_wind/g + w_d/v. A descent through a shear layer in44 which the headwind decreases with decreasing altitude raises F.45- Severity classes (typical training thresholds, NOT a regulation):46 F below 0.05 low, 0.05 to 0.1 moderate, 0.1 to 0.15 high, above47 0.15 severe. Applied to the encounter demand F_demand.48- Energy height loss: with specific energy E_s = h + v^2/(2g), the49 shear erodes energy height at dH_e/dt = v*(F_demand - F_available);50 at the approach escape condition (engines near the drag level,51 F_available about zero) this equals v*F_total. Altitude loss over52 the encounter is the rate times the encounter time.53- Downdraft out-climb check: the still-air maximum climb rate from the54 excess thrust is RC = v*(T - D)/W. If the downdraft exceeds RC the55 aircraft descends even at full current thrust.56- Recovery: the thrust increase that lifts F_available to the demand57 level is dT = W*(F_demand - F_available); report it and the58 thrust-to-weight increment.59- Escape ladder (deterministic): demand at or above 0.15 escape, 0.1060 high-alert, 0.05 moderate-alert, below 0.05 monitor.61- Units are SI throughout: N, m/s, m/s^2, m, s. Module constants fix62 the scale: G0 = 9.80665 m/s^2 and KT_TO_MS = 463/900 m/s per knot,63 so every number in this leaf is exactly reproducible.64- FAR 25 and CS 25 set the certification context (reference-only); the65 relations above are standard engineering methodology, summary-only.6667## Workflow68691. Fix the encounter state: mass to weight with weight_from_mass70 (W = m*g), true airspeed v, thrust T and drag D at the encounter71 start, and the wind inputs: the along-track wind acceleration72 a_wind = d(HW)/dt (from the observed headwind rate, e.g. 8 kt/s of73 decreasing headwind becomes -8*KT_TO_MS m/s^2) or the headwind74 gradient d(HW)/dh, plus the downdraft w_d.752. Compute the total F-factor: f_factor_from_thrust with the direct76 wind acceleration, or f_factor_from_wind_gradients with the77 altitude gradient, downdraft, speed, weight, thrust and drag.783. Classify the encounter with severity_class on the demand component79 (F_total - F_available); at the approach condition where thrust80 equals drag the total and the demand coincide.814. Get the energy height loss rate with energy_height_loss_rate and82 the altitude loss over the encounter with altitude_loss, or let83 windshear_verdict apply the exact v*(F_demand - F_available) form.845. Run the downdraft out-climb check with85 max_climb_rate_in_downdraft (excess thrust, weight, downdraft,86 speed): RC = v*(T - D)/W against the downdraft.876. Size the recovery with required_thrust_increment: the demand88 F_demand as f_target and the current excess-thrust ratio (T - D)/W89 as current_f gives dT = W*(F_demand - F_available).907. For the full picture call windshear_verdict(t, d, w, v, a_wind,91 downdraft, time_s) and read the f_available, f_demand, f_total,92 severity, energy_height_loss_rate_mps, altitude_loss_m, climb93 verdict and escape_verdict fields.948. Confirm the deterministic checks with the contract test95 scripts/test_windshear_analysis.py.9697## Worked example9899A transport on approach at v = 75 m/s, mass 55,000 kg (W = m*g =100539,365.75 N), engines at the approach setting with thrust equal to101drag at T = D = 77,000 N (L/D about 7.0), so F_available = 0. The102aircraft penetrates a microburst outflow: the headwind decreases at1038 kt/s, a_wind = -8 * 463/900 = -4.11556 m/s^2, and the downdraft is104w_d = 6 m/s. Encounter time 20 s.105106- Shear F-factor: F = 0 - (-4.11556)/9.80665 = 0.41967107 (f_factor_from_thrust returns 0.419670).108- Downdraft component: F_z = w_d/v = 6/75 = 0.08.109- Total F-factor of the encounter: F_total = 0.49967.110- Severity: severe (well above the 0.15 training threshold): the111 escape decision is required (escape_verdict "escape").112- Energy height loss rate: v*F_total = 37.475 m/s.113- Altitude loss over the 20 s encounter: 749.5 m of energy height.114- Out-climb check: RC = 75 * 0 / 539,365.75 = 0 m/s, far below the115 6 m/s downdraft, so the aircraft descends through the shear116 (climb_verdict "descend", out_climbs False).117- Recovery: dT = W*(F_demand - F_available) = 539,365.75 * 0.49967 =118 269,505 N, a thrust-to-weight increment of 0.4997. That exceeds the119 excess thrust ratio a go-around can deliver (about 0.3 to 0.4 for a120 transport), so the aircraft cannot neutralize the shear by thrust121 alone: escape now, do not attempt to continue the approach.122123## Verification124125- Confirm f_factor_from_thrust(77000, 77000, 539365.75, -4.11556)126 returns 0.419670 and that adding w_d/v = 0.08 gives 0.499670.127- Confirm f_factor_from_thrust with the same magnitude but an128 INCREASING headwind (+4.11556 m/s^2) returns -0.419670 (the wind129 adds energy: negative F, severity low).130- Confirm severity_class hits moderate at exactly 0.05, high at 0.1131 and severe at 0.15, with 0.0499 low and 0.1499 high.132- Confirm energy_height_loss_rate(0.499670, 75) = 37.475 m/s and133 altitude_loss(0.499670, 75, 20) = 749.505 m (rate times time).134- Confirm max_climb_rate_in_downdraft returns out_climbs False with135 verdict descend for zero excess thrust against a 6 m/s downdraft,136 and out_climbs True (RC = 7.5 m/s) for an excess thrust ratio of137 0.1.138- Confirm required_thrust_increment(0.499670, 0.0, 539365.75) =139 269,504.8 N, and zero when current_f already equals f_target.140- Confirm windshear_verdict on the worked example returns f_total141 0.499670, severity severe, energy_height_loss_rate_mps 37.475,142 altitude_loss_m 749.505, out_climbs False and escape_verdict143 "escape"; a calm encounter (a_wind = 0, w_d = 0, T = D) returns144 f_total 0.0, severity low, zero loss and escape_verdict "monitor".145- Confirm every non-positive weight, mass, speed or thrust, negative146 drag, and negative encounter time raises ValueError.147- Run the contract test offline: python3148 scripts/test_windshear_analysis.py (deterministic, exit 0).149150## Pitfalls151152- Getting the wind-acceleration sign backwards: a_wind is positive when the153 headwind increases (a performance increase that lowers F); the hazard is a154 decreasing headwind - an 8 kt/s decreasing headwind contributes about155 +0.42 to F, and an increasing headwind of the same magnitude gives -0.42156 (severity low).157- Classifying severity on the total instead of the demand: severity_class158 applies to the demand component F_demand (F_total - F_available); at the159 approach condition T = D the two coincide, but with excess thrust160 available they differ.161- Treating the severity thresholds as a regulation: 0.05/0.1/0.15 are162 typical training thresholds, not a regulatory limit, and the escape ladder163 is deterministic (escape at demand >= 0.15).164- Quoting altitude loss without the encounter time: the energy height erodes165 at v*F_total (37.5 m/s in the worked example) and altitude_loss is the166 rate times the encounter time (749.5 m over 20 s).167- Concluding 'can recover' from the thrust increment alone: dT = W*(F_demand168 - F_available) came out at 269.5 kN (thrust-to-weight 0.4997) for the169 worked approach, above the about 0.3-0.4 a go-around can deliver, so the170 verdict is escape now.171- Non-positive weight, mass, speed or thrust, negative drag, and negative172 encounter time raise ValueError.173174## Related leaves175176- flight-mechanics/performance/wind-effects: the steady wind triangle,177 groundspeed and crab angle; this leaf is the transient shear hazard.178- flight-mechanics/performance/energy-height: the energy state, zoom179 climb and specific excess power context behind the energy height180 loss rate.181- flight-mechanics/performance/climb-performance: excess-thrust climb182 capability and rates for the out-climb and recovery checks.183- flight-mechanics/performance/takeoff-performance and184 flight-mechanics/performance/landing-performance: distance185 performance under steady wind, adjacent to the shear hazard cases.186187## Behavior contract (gate 3)188189Run the deterministic contract test (stdlib unittest, offline):190191 python3 scripts/test_windshear_analysis.py192193The test covers the worked-example contract (F-factor 0.419670 from an1948 kt/s decreasing headwind at the stated weight, total 0.499670 with195the 6 m/s downdraft, severity severe, energy height loss rate19637.475 m/s, altitude loss 749.5 m over 20 s, recovery increment197269,505 N), the thrust and headwind-gradient F-factor forms, the198severity band boundaries, the downdraft out-climb verdicts including199the marginal equality case, energy height loss rate and altitude loss200scaling, the recovery increment including the already-sufficient zero201case, the full windshear_verdict dict on the example and on a calm202encounter, the round-trip zero-F identity in calm air, and ValueError203rejection of non-positive weight, mass, airspeed and thrust, negative204drag and negative encounter time.205206## Compliance207208- Standards referenced, not reproduced: FAR 25 and CS 25 are public209 regulation context (certification of transport category airplanes);210 the F-factor relations and severity bands are standard engineering211 methodology summarized from FAA windshear training guidance,212 summary-only per standards-map.yaml. No regulatory or training text213 is reproduced.214- compliance: STANDARDS-REF, gated: false.