Subsonic Inlet Recovery (propulsion/gas-turbine-cycle/subsonic-inlet-recovery)
Use when you must compute the total-pressure recovery and the
compressor-face condition for a subsonic turbofan or turboprop intake
at a flight condition: the ram recovery ratio from the free-stream
Mach number, the free-stream stagnation pressure ratio from the
isentropic relation, the total pressure delivered at the engine face
after the duct total-pressure efficiency, the required capture area
for the engine mass flow at the flight speed and density, and the
capture verdict against the intake highlight area. This leaf
implements the standard subsonic intake model in pure Python, stdlib
only. It pairs with propulsion/gas-turbine-cycle/gas-turbine-cycle and
propulsion/turbofan/turbofan-cycle, whose cycle decks take the face
total pressure this leaf produces as an input at the fan face station;
the shock-dominated intake regimes of the ramjet
family belong to propulsion/ramjet/ramjet-inlet, and the exhaust side
is handled by propulsion/gas-turbine-cycle/propelling-nozzle.
Domain quick reference
- Ram recovery ratio: the fraction of the free-stream total pressure
that survives the intake at the engine face, before the duct loss.
It is unity at and below Mach 1, and rolls off above Mach 1 with a
MIL-E-5008B style curve, rr = 1 - 0.075 * (M - 1)^1.35 for
1 < M < 5. Beyond Mach 5 the subsonic model no longer applies.
- Free-stream stagnation pressure ratio: p0_ratio = (1 + 0.2 * M^2)^3.5
from the isentropic relation at gamma = 1.4 (standard atmosphere
still air total-to-static ratio at the flight Mach).
- Engine face total pressure: pt_face = p0 * p0_ratio * rr *
duct_efficiency. The duct total-pressure efficiency carries all duct
losses between the intake highlight and the fan face, so at subsonic
Mach with a perfect duct the face total pressure is simply
p0 * p0_ratio, the free-stream stagnation value.
- Capture area: the streamtube area that passes the engine mass flow at
the free-stream condition, A_cap = m_dot / (rho * V), with the
free-stream density rho = p0 / (R * T0) and speed
V = M * sqrt(gamma * R * T0), R = 287.0 J/(kg K), gamma = 1.4.
- Capture verdict: full-capture when A_cap <= A_highlight, the capture
streamtube fits inside the intake highlight area; spillage when
A_cap > A_highlight, the intake spills the excess flow around the
lip and the engine is starved of its demanded streamtube.
- Units are SI throughout: Pa, K, kg/s, m2, m/s, Mach dimensionless.
- FAR Part 25 frames the installation context (the intake is part of
the engine installation); the relations above are standard
engineering methodology, summary-only.
Workflow
- Fix the flight condition: free-stream static pressure p0, static
temperature T0 and Mach number M (free-stream values, not total).
- Get the ram recovery ratio with ram_recovery(M): unity at subsonic
Mach, rolled off above Mach 1 by the MIL-E-5008B style curve.
- Promote the free stream to stagnation with
stagnation_pressure_ratio(M).
- Apply the duct total-pressure efficiency and form the engine face
total pressure with face_total_pressure(p0, M, duct_efficiency);
this value is the inlet station input for the cycle deck.
- Size the intake for the engine mass flow with
capture_area(mass_flow, p0, T0, M), which builds the free-stream
density and speed and divides the mass flow by their product.
- Judge the intake against its highlight area with
capture_verdict(capture_area, highlight_area): full-capture or
spillage.
- Confirm the deterministic checks with the contract test
scripts/test_subsonic-inlet-recovery.py.
Worked example
Flight condition (11 km standard day): Mach 0.82, p0 = 101325 Pa,
T0 = 216.65 K, duct_efficiency 0.98, engine mass flow 200 kg/s.
- Ram recovery: ram_recovery(0.82) = 1.0, full recovery at subsonic
Mach. At Mach 1.5 the roll-off gives ram_recovery(1.5) =
0.9705781, and ram_recovery(2.0) = 0.925 exactly.
- Stagnation ratio: stagnation_pressure_ratio(0.82) = 1.5552097, so
the free-stream stagnation pressure is 101325 * 1.5552097 =
157581.5 Pa.
- Face total pressure: face_total_pressure(101325, 0.82, 0.98) =
154429.99 Pa, the stagnation pressure cut by the 0.98 duct
efficiency (spec anchor 154430 Pa, matched within 1 Pa).
- Capture area: rho = 101325 / (287.0 * 216.65) = 1.62958 kg/m3,
V = 0.82 * sqrt(1.4 * 287.0 * 216.65) = 241.935 m/s, and
capture_area(200, 101325, 216.65, 0.82) = 200 / (1.62958 *
241.935) = 0.507289 m2 (spec bound 0.5075 m2, matched within 1e-3).
- Capture verdict: against a 0.60 m2 highlight the intake is in
full-capture; against a 0.45 m2 highlight the same flow demands a
larger streamtube than the lip admits, so the verdict is spillage.
Verification
- Confirm ram_recovery(0.82) returns 1.0 and ram_recovery(2.0) returns
0.925 exactly.
- Confirm face_total_pressure(101325, 0.82, 0.98) returns 154429.99 Pa,
within 1 Pa of the 154430 Pa spec anchor.
- Confirm capture_area(200, 101325, 216.65, 0.82) returns 0.507289 m2,
within 1e-3 of the 0.5075 m2 spec bound, and that doubling the
free-stream density halves the required area (inverse density
scaling identity).
- Confirm capture_verdict(0.507289, 0.60) is "full-capture" and
capture_verdict(0.507289, 0.45) is "spillage".
- Confirm negative Mach, Mach at or above 5, non-positive pressure,
temperature or mass flow, zero or negative duct efficiency, duct
efficiency above 1 and non-positive capture or highlight areas all
raise ValueError.
- Run the contract test offline: python3
scripts/test_subsonic-inlet-recovery.py (31 tests, deterministic).
Related leaves
- propulsion/gas-turbine-cycle/gas-turbine-cycle: consumes the face
total pressure this leaf produces as the cycle inlet condition.
- propulsion/turbofan/turbofan-cycle: fan-face station input from the
intake recovery at the turbofan design point.
- propulsion/ramjet/ramjet-inlet: the shock-dominated ramjet intake
model for the regimes this leaf does not cover.
- propulsion/gas-turbine-cycle/propelling-nozzle: the exhaust side
counterpart that turns the cycle exit state into thrust.
- propulsion/gas-turbine-cycle/real-cycle-effects: component loss
bookkeeping that complements the single duct efficiency here.
Pitfalls
- Feeding total conditions as the free-stream static state: the model
takes free-stream static p0 and T0, not stagnation values; the
stagnation ratio and ram recovery are applied on top of p0 to reach
the face total pressure.
- Expecting the ram recovery to fall below unity at subsonic Mach:
rr = 1.0 for all M <= 1.0, the roll-off only begins above Mach 1, so
a Mach 0.82 intake with duct efficiency 0.98 loses all of its 1.5%
pressure loss in the duct, not in the external stream.
- Reading the face total pressure as the free-stream total pressure:
the duct total-pressure efficiency is a separate multiplier, 0.98 in
the worked example, that the free-stream stagnation value does not
include (157581.5 Pa against 154429.99 Pa at the face).
- Judging capture without the highlight area: a small capture area is
not by itself good or bad; the verdict compares it with the intake
highlight area, and the same 0.5073 m2 streamtube is full-capture at
a 0.60 m2 highlight and spillage at 0.45 m2.
- Extending the recovery curve to high Mach: the MIL-E-5008B style
roll-off is only valid below Mach 5, and the whole model is subsonic
in intent, so Mach 5 and above raises ValueError by design.
Behavior contract (gate 3)
Run the deterministic contract test (stdlib unittest, offline):
python3 scripts/test_subsonic-inlet-recovery.py
The test covers the worked-example contract (face total pressure
154430 Pa within 1 Pa, capture area 0.5075 m2 within 1e-3), the ram
recovery truth table at Mach 1.2 and 2.0 and the 0.970578 bound at
Mach 1.5, unity recovery across the subsonic range, the stagnation
pressure ratio formula and its Mach 0.82 anchor, the subsonic
full-recovery identity pt_face = p0 * p0_ratio at duct efficiency 1.0,
the inverse-density capture area identity, the full-capture and
spillage verdicts against both highlight areas, determinism of every
function, and ValueError rejection of negative Mach, Mach at or above
5, non-positive pressure, temperature and mass flow, duct efficiency
outside (0, 1] and non-positive capture or highlight areas.
Compliance
- Standards referenced, not reproduced: far-33 (family spine, the
engine installation context in which the intake lives, FAR Part 25
installation text named only); the recovery curve follows MIL-E-5008B
style practice, summary-only per standards-map.yaml.
- compliance: STANDARDS-REF, gated: false.
1---2name: subsonic-inlet-recovery3description: Use when you must compute subsonic inlet total pressure recovery at a flight condition: the ram recovery ratio from free-stream Mach (unity below Mach 1, MIL-E-5008B style roll-off above), the isentropic stagnation pressure ratio, the engine face total pressure after the duct total-pressure efficiency, the capture area for the engine mass flow at flight speed and density, and the capture verdict against the intake highlight, spillage when the required capture exceeds the highlight. Produces ram recovery, face total pressure, capture area and the full-capture or spillage verdict for the cycle deck inlet. Trigger: subsonic intake recovery, ram recovery ratio, engine face total pressure, intake capture area, duct total pressure efficiency.4license: Apache-2.05---67# Subsonic Inlet Recovery (propulsion/gas-turbine-cycle/subsonic-inlet-recovery)89Use when you must compute the total-pressure recovery and the10compressor-face condition for a subsonic turbofan or turboprop intake11at a flight condition: the ram recovery ratio from the free-stream12Mach number, the free-stream stagnation pressure ratio from the13isentropic relation, the total pressure delivered at the engine face14after the duct total-pressure efficiency, the required capture area15for the engine mass flow at the flight speed and density, and the16capture verdict against the intake highlight area. This leaf17implements the standard subsonic intake model in pure Python, stdlib18only. It pairs with propulsion/gas-turbine-cycle/gas-turbine-cycle and19propulsion/turbofan/turbofan-cycle, whose cycle decks take the face20total pressure this leaf produces as an input at the fan face station;21the shock-dominated intake regimes of the ramjet22family belong to propulsion/ramjet/ramjet-inlet, and the exhaust side23is handled by propulsion/gas-turbine-cycle/propelling-nozzle.2425## Domain quick reference2627- Ram recovery ratio: the fraction of the free-stream total pressure28 that survives the intake at the engine face, before the duct loss.29 It is unity at and below Mach 1, and rolls off above Mach 1 with a30 MIL-E-5008B style curve, rr = 1 - 0.075 * (M - 1)^1.35 for31 1 < M < 5. Beyond Mach 5 the subsonic model no longer applies.32- Free-stream stagnation pressure ratio: p0_ratio = (1 + 0.2 * M^2)^3.533 from the isentropic relation at gamma = 1.4 (standard atmosphere34 still air total-to-static ratio at the flight Mach).35- Engine face total pressure: pt_face = p0 * p0_ratio * rr *36 duct_efficiency. The duct total-pressure efficiency carries all duct37 losses between the intake highlight and the fan face, so at subsonic38 Mach with a perfect duct the face total pressure is simply39 p0 * p0_ratio, the free-stream stagnation value.40- Capture area: the streamtube area that passes the engine mass flow at41 the free-stream condition, A_cap = m_dot / (rho * V), with the42 free-stream density rho = p0 / (R * T0) and speed43 V = M * sqrt(gamma * R * T0), R = 287.0 J/(kg K), gamma = 1.4.44- Capture verdict: full-capture when A_cap <= A_highlight, the capture45 streamtube fits inside the intake highlight area; spillage when46 A_cap > A_highlight, the intake spills the excess flow around the47 lip and the engine is starved of its demanded streamtube.48- Units are SI throughout: Pa, K, kg/s, m2, m/s, Mach dimensionless.49- FAR Part 25 frames the installation context (the intake is part of50 the engine installation); the relations above are standard51 engineering methodology, summary-only.5253## Workflow54551. Fix the flight condition: free-stream static pressure p0, static56 temperature T0 and Mach number M (free-stream values, not total).572. Get the ram recovery ratio with ram_recovery(M): unity at subsonic58 Mach, rolled off above Mach 1 by the MIL-E-5008B style curve.593. Promote the free stream to stagnation with60 stagnation_pressure_ratio(M).614. Apply the duct total-pressure efficiency and form the engine face62 total pressure with face_total_pressure(p0, M, duct_efficiency);63 this value is the inlet station input for the cycle deck.645. Size the intake for the engine mass flow with65 capture_area(mass_flow, p0, T0, M), which builds the free-stream66 density and speed and divides the mass flow by their product.676. Judge the intake against its highlight area with68 capture_verdict(capture_area, highlight_area): full-capture or69 spillage.707. Confirm the deterministic checks with the contract test71 scripts/test_subsonic-inlet-recovery.py.7273## Worked example7475Flight condition (11 km standard day): Mach 0.82, p0 = 101325 Pa,76T0 = 216.65 K, duct_efficiency 0.98, engine mass flow 200 kg/s.7778- Ram recovery: ram_recovery(0.82) = 1.0, full recovery at subsonic79 Mach. At Mach 1.5 the roll-off gives ram_recovery(1.5) =80 0.9705781, and ram_recovery(2.0) = 0.925 exactly.81- Stagnation ratio: stagnation_pressure_ratio(0.82) = 1.5552097, so82 the free-stream stagnation pressure is 101325 * 1.5552097 =83 157581.5 Pa.84- Face total pressure: face_total_pressure(101325, 0.82, 0.98) =85 154429.99 Pa, the stagnation pressure cut by the 0.98 duct86 efficiency (spec anchor 154430 Pa, matched within 1 Pa).87- Capture area: rho = 101325 / (287.0 * 216.65) = 1.62958 kg/m3,88 V = 0.82 * sqrt(1.4 * 287.0 * 216.65) = 241.935 m/s, and89 capture_area(200, 101325, 216.65, 0.82) = 200 / (1.62958 *90 241.935) = 0.507289 m2 (spec bound 0.5075 m2, matched within 1e-3).91- Capture verdict: against a 0.60 m2 highlight the intake is in92 full-capture; against a 0.45 m2 highlight the same flow demands a93 larger streamtube than the lip admits, so the verdict is spillage.9495## Verification9697- Confirm ram_recovery(0.82) returns 1.0 and ram_recovery(2.0) returns98 0.925 exactly.99- Confirm face_total_pressure(101325, 0.82, 0.98) returns 154429.99 Pa,100 within 1 Pa of the 154430 Pa spec anchor.101- Confirm capture_area(200, 101325, 216.65, 0.82) returns 0.507289 m2,102 within 1e-3 of the 0.5075 m2 spec bound, and that doubling the103 free-stream density halves the required area (inverse density104 scaling identity).105- Confirm capture_verdict(0.507289, 0.60) is "full-capture" and106 capture_verdict(0.507289, 0.45) is "spillage".107- Confirm negative Mach, Mach at or above 5, non-positive pressure,108 temperature or mass flow, zero or negative duct efficiency, duct109 efficiency above 1 and non-positive capture or highlight areas all110 raise ValueError.111- Run the contract test offline: python3112 scripts/test_subsonic-inlet-recovery.py (31 tests, deterministic).113114## Related leaves115116- propulsion/gas-turbine-cycle/gas-turbine-cycle: consumes the face117 total pressure this leaf produces as the cycle inlet condition.118- propulsion/turbofan/turbofan-cycle: fan-face station input from the119 intake recovery at the turbofan design point.120- propulsion/ramjet/ramjet-inlet: the shock-dominated ramjet intake121 model for the regimes this leaf does not cover.122- propulsion/gas-turbine-cycle/propelling-nozzle: the exhaust side123 counterpart that turns the cycle exit state into thrust.124- propulsion/gas-turbine-cycle/real-cycle-effects: component loss125 bookkeeping that complements the single duct efficiency here.126127## Pitfalls128129- Feeding total conditions as the free-stream static state: the model130 takes free-stream static p0 and T0, not stagnation values; the131 stagnation ratio and ram recovery are applied on top of p0 to reach132 the face total pressure.133- Expecting the ram recovery to fall below unity at subsonic Mach:134 rr = 1.0 for all M <= 1.0, the roll-off only begins above Mach 1, so135 a Mach 0.82 intake with duct efficiency 0.98 loses all of its 1.5%136 pressure loss in the duct, not in the external stream.137- Reading the face total pressure as the free-stream total pressure:138 the duct total-pressure efficiency is a separate multiplier, 0.98 in139 the worked example, that the free-stream stagnation value does not140 include (157581.5 Pa against 154429.99 Pa at the face).141- Judging capture without the highlight area: a small capture area is142 not by itself good or bad; the verdict compares it with the intake143 highlight area, and the same 0.5073 m2 streamtube is full-capture at144 a 0.60 m2 highlight and spillage at 0.45 m2.145- Extending the recovery curve to high Mach: the MIL-E-5008B style146 roll-off is only valid below Mach 5, and the whole model is subsonic147 in intent, so Mach 5 and above raises ValueError by design.148149## Behavior contract (gate 3)150151Run the deterministic contract test (stdlib unittest, offline):152153 python3 scripts/test_subsonic-inlet-recovery.py154155The test covers the worked-example contract (face total pressure156154430 Pa within 1 Pa, capture area 0.5075 m2 within 1e-3), the ram157recovery truth table at Mach 1.2 and 2.0 and the 0.970578 bound at158Mach 1.5, unity recovery across the subsonic range, the stagnation159pressure ratio formula and its Mach 0.82 anchor, the subsonic160full-recovery identity pt_face = p0 * p0_ratio at duct efficiency 1.0,161the inverse-density capture area identity, the full-capture and162spillage verdicts against both highlight areas, determinism of every163function, and ValueError rejection of negative Mach, Mach at or above1645, non-positive pressure, temperature and mass flow, duct efficiency165outside (0, 1] and non-positive capture or highlight areas.166167## Compliance168169- Standards referenced, not reproduced: far-33 (family spine, the170 engine installation context in which the intake lives, FAR Part 25171 installation text named only); the recovery curve follows MIL-E-5008B172 style practice, summary-only per standards-map.yaml.173- compliance: STANDARDS-REF, gated: false.